Tatūnga CD mā gitlab

I tetahi wa i whakaaro ahau mo te whakaaunoa i te tukunga o taku kaupapa. Ko te gitlab.com e whakarato ana i nga taputapu katoa mo tenei, a ko te tikanga ka whakatau ahau ki te whakamahi ma te whakaaro me te tuhi i tetahi tuhinga tukunga iti. I roto i tenei tuhinga, ka whakapuaki ahau i aku wheako ki te hapori.

TL; DR

  1. Whakaritehia te VPS: whakakorehia te pakiaka, te takiuru kupuhipa, te whakauru i te dockerd, te whirihora ufw
  2. Waihanga tiwhikete mo te tūmau me te kiritaki docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Whakahohehia te mana dockerd ma te turanga tcp: tangohia te whiringa -H fd:// mai i te whirihora docker.
  3. Tautuhia nga ara ki nga tiwhikete i docker.json
  4. Rēhita ki nga taurangi gitlab i nga tautuhinga CI / CD me nga ihirangi o nga tiwhikete. Tuhia he tuhinga .gitlab-ci.yml mo te horahanga.

Ka whakaatu ahau i nga tauira katoa mo te tohatoha Debian.

Tatūnga VPS tuatahi

I konei ka hokona e koe he tauira hei tauira DO, Ko te mahi tuatahi ko te tiaki i to kaimau mai i te ao pukuriri o waho. E kore ahau e whakamatau, e kii ranei i tetahi mea, ka whakaatu noa ahau i te /var/log/messages log o taku tūmau mariko:

MatapihiTatūnga CD mā gitlab

Tuatahi, tāuta te pātūahi ufw:

apt-get update && apt-get install ufw

Whakahohehia te kaupapa here taunoa: aukati i nga hononga taumai katoa, tukua nga hononga puta katoa:

ufw default deny incoming
ufw default allow outgoing

He mea nui: kaua e wareware ki te tuku hononga ma te ssh:

ufw allow OpenSSH

Ko te wetereo whānui ko: Whakaaetia te hononga ki te tauranga: ufw whakaae 12345, ko 12345 te tau tauranga, te ingoa ratonga ranei. Whakakahore: ufw whakakahore 12345

Whakakāhia te pātūahi:

ufw enable

Ka puta matou i te waahi ka takiuru ano ma te ssh.

Tāpirihia he kaiwhakamahi, tohua he kupuhipa, ka taapiri atu ki te roopu sudo.

apt-get install sudo
adduser scoty
usermod -aG sudo scoty

I muri mai, kia rite ki te mahere, me whakakorehia e koe te takiuru kupuhipa. ki te mahi i tenei, kape to ssh ki te tūmau:

ssh-copy-id [email protected]

Me mau te ip o te tūmau. Inaianei me ngana ki te takiuru i raro i te kaiwhakamahi i hanga i mua, kaore koe e hiahia ki te whakauru i tetahi kupuhipa. I muri mai, i roto i nga tautuhinga whirihoranga, hurihia nga mea e whai ake nei:

sudo nano /etc/ssh/sshd_config

mono te takiuru kupuhipa:

PasswordAuthentication no

Tīmataria anō te daemon sshd:

sudo systemctl reload sshd

Inaianei mena ka ngana koe, tetahi atu ranei ki te takiuru hei putake, ka rahua.

I muri mai, ka whakauruhia e matou te dockerd, kaore au e whakaahua i te mahi i konei, na te mea ka taea te whakarereke i nga mea katoa, whai i te hono ki te paetukutuku mana ka haere i roto i nga waahanga o te whakauru i te docker ki to miihini mariko: https://docs.docker.com/install/linux/docker-ce/debian/

Te whakaputa tiwhikete

Hei whakahaere mamao i te daemon docker, ka hiahiatia he hononga TLS whakamunatia. Ki te mahi i tenei, me whai tiwhikete koe me tetahi matua e hiahia ana koe ki te whakaputa me te whakawhiti ki to miihini mamao. A pee i nga taahiraa i homai i roto i nga tohutohu i runga i te paetukutuku docker mana: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Ko nga konae *.pem katoa i hanga mo te tūmau, ara te ca.pem, server.pem, key.pem, me whakanoho ki roto i te whaiaronga /etc/docker i runga i te tūmau.

tatūnga docker

I roto i te tuhinga whakaoho daemon docker, tangohia te -H df: // kōwhiringa, ma tenei kowhiringa ka whakaatu ko wai te kaihautu ka taea te whakahaere i te daemon docker.

# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd

Panuku, hanga he konae tautuhinga mena karekau ano i te waahi ka whakarite i nga whiringa:

/etc/docker/docker.json

{
  "hosts": [
    "unix:///var/run/docker.sock",
    "tcp://0.0.0.0:2376"
  ],
  "labels": [
    "is-our-remote-engine=true"
  ],
  "tls": true,
  "tlscacert": "/etc/docker/ca.pem",
  "tlscert": "/etc/docker/server.pem",
  "tlskey": "/etc/docker/key.pem",
  "tlsverify": true
}

Whakaaetia nga hononga ki te tauranga 2376:

sudo ufw allow 2376

Tīmata anō te dockerd me ngā tautuhinga hōu:

sudo systemctl daemon-reload && sudo systemctl restart docker

Me taki tatou:

sudo systemctl status docker

Mena he kakariki nga mea katoa, ka whakaaro maatau kua pai te whirihora i te docker ki runga i te tūmau.

Te whakarite i te tuku haere tonu i runga i te gitlab

Kia ahei ai te kaimahi gitalab ki te whakahaere i nga whakahau i runga i te kaihautu docker mamao, me whakatau koe me pehea me te waahi hei penapena tiwhikete me tetahi ki mo te hononga whakamunatia ki te dockerd. I whakaotihia e ahau tenei raruraru ma te tuhi noa ki nga taurangi i roto i nga tautuhinga gitlbab:

taitara kaipahuaTatūnga CD mā gitlab

Me whakaputa noa nga ihirangi o nga tiwhikete me te matua ma te ngeru: cat ca.pem. Tārua me te whakapiri ki nga uara taurangi.

Me tuhi tuhi tuhi mo te horahanga ma te gitlab. Ka whakamahia te ahua docker-in-docker (dind).

.gitlab-ci.yml

image:
  name: docker/compose:1.23.2
  # перепишем entrypoint , чтобы работало в dind
  entrypoint: ["/bin/sh", "-c"]

variables:
  DOCKER_HOST: tcp://docker:2375/
  DOCKER_DRIVER: overlay2

services:
  - docker:dind

stages:
  - deploy

deploy:
  stage: deploy
  script:
    - bin/deploy.sh # скрипт деплоя тут

Ko nga ihirangi o te tuhinga whakatakotoranga me nga korero:

bin/deploy.sh

#!/usr/bin/env sh
# Падаем сразу, если возникли какие-то ошибки
set -e
# Выводим, то , что делаем
set -v

# 
DOCKER_COMPOSE_FILE=docker-compose.yml
# Куда деплоим
DEPLOY_HOST=185.241.52.28
# Путь для сертификатов клиента, то есть в нашем случае - gitlab-воркера
DOCKER_CERT_PATH=/root/.docker

# проверим, что в контейнере все имеется
docker info
docker-compose version

# создаем путь (сейчас работаем в клиенте - воркере gitlab'а)
mkdir $DOCKER_CERT_PATH
# изымаем содержимое переменных, при этом удаляем лишние символы добавленные при сохранении переменных.
echo "$CA_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/ca.pem
echo "$CERT_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/cert.pem
echo "$KEY_PEM" | tr -d 'r' > $DOCKER_CERT_PATH/key.pem
# на всякий случай даем только читать
chmod 400 $DOCKER_CERT_PATH/ca.pem
chmod 400 $DOCKER_CERT_PATH/cert.pem
chmod 400 $DOCKER_CERT_PATH/key.pem

# далее начинаем уже работать с удаленным docker-демоном. Собственно, сам деплой
export DOCKER_TLS_VERIFY=1
export DOCKER_HOST=tcp://$DEPLOY_HOST:2376

# проверим, что коннектится все успешно
docker-compose 
  -f $DOCKER_COMPOSE_FILE 
  ps

# логинимся в docker-регистри, тут можете указать свой "местный" регистри
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD

docker-compose 
  -f $DOCKER_COMPOSE_FILE 
  pull app
# поднимаем приложение
docker-compose 
  -f $DOCKER_COMPOSE_FILE 
  up -d app

Ko te raru nui ko te "tango" nga ihirangi o nga tiwhikete i roto i te ahua noa mai i nga taurangi gitlab CI / CD. Kaore au i mohio he aha i kore ai e mahi te hononga ki te kaihautu mamao. I titiro ahau ki te sudo journalctl -u docker log i runga i te kaihautu, he hapa kei te ruru ringa. I whakatau ahau ki te titiro ki nga mea kei te rongoa i roto i nga taurangi, mo tenei ka kite koe i te ngeru -A $DOCKER_CERT_PATH/key.pem. I hinga i te hapa ma te taapiri i te tangohanga o te tohu tohu tr -d 'r'.

I tua atu, ka taea e koe te taapiri i nga mahi i muri i te tukunga ki te tuhinga i runga i to whakaaro. Ka taea e koe te tirotiro i te putanga mahi i roto i taku putunga https://gitlab.com/isqad/gitlab-ci-cd

Source: will.com

Tāpiri i te kōrero