Suidheachadh CD tro gitlab

Bha mi aon uair a’ smaoineachadh mu bhith a’ cleachdadh mo phròiseact gu fèin-ghluasadach. Tha gitlab.com gu coibhneil a’ toirt seachad na h-innealan gu lèir airson seo, agus gu dearbh chuir mi romham a chleachdadh le bhith ga lorg agus a’ sgrìobhadh sgriobt beag cleachdadh. San artaigil seo, bidh mi a’ roinn m ’eòlas leis a’ choimhearsnachd.

TL; DR

  1. Stèidhich VPS: cuir à comas freumh, logadh a-steach facal-faire, stàlaich dockerd, rèitich ufw
  2. Cruthaich teisteanasan airson frithealaiche agus teachdaiche docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Dèan comas air smachd dockerd tro tcp socket: thoir air falbh an roghainn -H fd: // bho rèiteachadh an docker.
  3. Suidhich slighean gu teisteanasan ann an docker.json
  4. Clàraich anns na caochladairean gitlab anns na roghainnean CI / CD le susbaint nan teisteanasan. Sgrìobh sgriob .gitlab-ci.yml airson a chleachdadh.

Seallaidh mi a h-uile eisimpleir air an sgaoileadh Debian.

Suidheachadh VPS tùsail

An seo cheannaich thu eisimpleir mar eisimpleir air DO, is e a’ chiad rud a nì thu do fhrithealaiche a dhìon bhon t-saoghal ionnsaigheach a-muigh. Cha bhith mi a’ dearbhadh no a’ dearbhadh dad, seallaidh mi an loga /var/log/messages den t-seirbheisiche mas-fhìor agam:

Ð¡ÐºÑ € Ð¸Ð½ÑˆÐ¾Ñ ‚Suidheachadh CD tro gitlab

An toiseach, stàlaich am balla-teine ​​​​ufw:

apt-get update && apt-get install ufw

Dèan comas air a’ phoileasaidh bunaiteach: cuir stad air a h-uile ceangal a tha a’ tighinn a-steach, ceadaich a h-uile ceangal a-mach:

ufw default deny incoming
ufw default allow outgoing

Cudromach: na dìochuimhnich ceangal a cheadachadh tro ssh:

ufw allow OpenSSH

Is e an co-chòrdadh coitcheann: Ceadaich ceangal air port: ceadaich ufw 12345, far a bheil 12345 mar àireamh port no ainm seirbheis. diùltadh: ufw àicheadh ​​12345

Cuir air balla-teine:

ufw enable

Bidh sinn a’ fàgail an t-seisean agus a’ logadh a-steach a-rithist tro ssh.

Cuir cleachdaiche ris, sònraich facal-faire dha, agus cuir ris a’ bhuidheann sudo e.

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

An ath rud, a rèir a’ phlana, bu chòir dhut logadh a-steach facal-faire a dhì-cheadachadh. Gus seo a dhèanamh, dèan lethbhreac den iuchair ssh agad chun an fhrithealaiche:

ssh-copy-id [email protected]

Feumaidh ip an fhrithealaiche a bhith leatsa. A-nis feuch ri logadh a-steach fon neach-cleachdaidh a chaidh a chruthachadh na bu thràithe, chan fheum thu facal-faire a chuir a-steach tuilleadh. An uairsin, anns na roghainnean rèiteachaidh, atharraich na leanas:

sudo nano /etc/ssh/sshd_config

cuir à comas logadh a-steach facal-faire:

PasswordAuthentication no

Ath-thòisich an daemon sshd:

sudo systemctl reload sshd

A-nis ma dh'fheuchas tu fhèin no cuideigin eile ri logadh a-steach mar fhreumh, fàilligidh e.

An uairsin, bidh sinn a ’stàladh dockerd, cha toir mi cunntas air a’ phròiseas an seo, oir faodar a h-uile càil atharrachadh mu thràth, lean an ceangal chun làrach-lìn oifigeil agus gabh tro na ceumannan gus docker a chuir a-steach air an inneal brìgheil agad: https://docs.docker.com/install/linux/docker-ce/debian/

Ginealach teisteanais

Gus smachd a chumail air an daemon docker air astar, tha feum air ceangal TLS crioptaichte. Gus seo a dhèanamh, feumaidh teisteanas agus iuchair a bhith agad a dh’ fheumas tu a ghineadh agus a ghluasad chun inneal iomallach agad. Lean na ceumannan a tha air an toirt seachad anns an stiùireadh air làrach-lìn oifigeil docker: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Bu chòir a h-uile faidhle * .pem a chaidh a chruthachadh airson an fhrithealaiche, is e sin ca.pem, server.pem, key.pem, a chuir anns an eòlaire /etc/docker air an fhrithealaiche.

suidheachadh docker

Anns an sgriobt tòiseachaidh daemon docker, thoir air falbh an roghainn -H df: //, tha an roghainn seo ag innse dè an aoigh air am faodar smachd a chumail air an daemon docker.

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

An uairsin, cruthaich faidhle roghainnean mura h-eil e ann mu thràth agus suidhich na roghainnean:

/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
}

Ceadaich ceanglaichean air port 2376:

sudo ufw allow 2376

Ath-thòisich dockerd le roghainnean ùra:

sudo systemctl daemon-reload && sudo systemctl restart docker

Feuch an dèan sinn sgrùdadh:

sudo systemctl status docker

Ma tha a h-uile càil uaine, tha sinn den bheachd gu bheil sinn air docker a rèiteachadh gu soirbheachail air an fhrithealaiche.

A’ stèidheachadh lìbhrigeadh leantainneach air gitlab

Gus am bi e comasach don neach-obrach gitalab òrdughan a chuir an gnìomh air aoigh docker iomallach, feumaidh tu co-dhùnadh ciamar agus càite an stòradh thu teisteanasan agus iuchair airson ceangal crioptaichte ri dockerd. Dh’ fhuasgail mi an duilgheadas seo le bhith dìreach a’ sgrìobhadh gu na caochladairean anns na roghainnean gitlbab:

tiotal spoilerSuidheachadh CD tro gitlab

Dìreach cuir a-mach susbaint nan teisteanasan agus an iuchair tro chat: cat ca.pem. Dèan lethbhreac agus pasg air luachan caochlaideach.

Sgrìobhamaid sgriobt airson a chleachdadh tro gitlab. Thèid an ìomhaigh docker-in-docker (dind) a chleachdadh.

.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 # скрипт деплоя тут

Susbaint an sgriobt cleachdadh le beachdan:

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

B' e am prìomh dhuilgheadas "tarraing a-mach" susbaint nan teisteanasan san fhoirm àbhaisteach bho na caochladairean gitlab CI/CD. Cha b’ urrainn dhomh faighinn a-mach carson nach do dh’obraich an ceangal ris an òstair iomallach. Choimhead mi air loga sudo journalctl -u docker air an aoigh, tha mearachd ann leis a’ chrathadh làimhe. Cho-dhùin mi coimhead air na tha sa chumantas air a stòradh ann an caochladairean, airson seo chì thu cat -A $DOCKER_CERT_PATH/key.pem. Fhuair sinn seachad air a’ mhearachd le bhith a’ cur a-steach toirt air falbh a’ charactar caret tr -d ‘r’.

A bharrachd air an sin, faodaidh tu gnìomhan iar-sgaoilidh a chuir ris an sgriobt mar as toil leat. Faodaidh tu sgrùdadh a dhèanamh air an dreach obrach anns an stòr-dàta agam https://gitlab.com/isqad/gitlab-ci-cd

Source: www.habr.com

Cuir beachd ann