Sazkirina CD bi rêya gitlab

Ez carekê li ser otomatîzekirina bicîhkirina projeya xwe fikirîm. gitlab.com ji bo vê yekê ji kerema xwe hemî amûran peyda dike, û bê guman min biryar da ku wê bi fêhmkirina wê û nivîsandina skrîptek piçûkxistinê bikar bînim. Di vê gotarê de, ez ezmûna xwe bi civakê re parve dikim.

TL; DR

  1. VPS saz bikin: root neçalak bikin, têketina şîfreyê, dockerd saz bikin, ufw mîheng bikin
  2. Sertîfîkayên ji bo server û xerîdar biafirînin docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Kontrola dockerd-ê bi riya soketa tcp çalak bike: vebijarka -H fd:// ji veavakirina dockerê derxînin.
  3. Rêyên sertîfîkayan li docker.json saz bikin
  4. Di guherbarên gitlab de di mîhengên CI / CD de bi naveroka sertîfîkayan re qeyd bikin. Ji bo bicihkirinê skrîptek .gitlab-ci.yml binivîsin.

Ez ê hemî mînakan li ser belavkirina Debian nîşan bidim.

Sazkirina VPS-ya destpêkê

Li vir we mînakek mînakek li ser kirî DO, yekem tiştê ku hûn bikin ev e ku hûn servera xwe ji cîhana derve ya êrîşkar biparêzin. Ez ê tiştek îsbat nekim û nebêjim, ez ê tenê têketina /var/log/messages servera xweya virtual nîşan bidim:

KrîtîkSazkirina CD bi rêya gitlab

Pêşîn, dîwarê ufw-ê saz bikin:

apt-get update && apt-get install ufw

Siyaseta xwerû çalak bike: hemî girêdanên hatinî asteng bike, destûr bide hemî girêdanên derketinê:

ufw default deny incoming
ufw default allow outgoing

Girîng: ji bîr nekin ku destûr bidin girêdana bi ssh:

ufw allow OpenSSH

Hevoksaziya gelemperî ev e: Destûr bide girêdana li portê: ufw destûr dide 12345, ku 12345 jimareya portê an navê karûbarê ye. Înkar bike: ufw înkar bike 12345

Firewallê veke:

ufw enable

Em ji danişînê derdikevin û dîsa bi riya ssh têkevin.

Bikarhênerek lê zêde bike, şîfreyek jê re destnîşan bike, û wî li koma sudo zêde bike.

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

Piştre, li gorî planê, divê hûn têketina şîfreyê neçalak bikin. ji bo vê yekê, mifteya ssh-a xwe li serverê kopî bikin:

ssh-copy-id [email protected]

IP-ya serverê divê ya we be. Naha hewl bidin ku têkevin bin bikarhênerê ku berê hatî afirandin, hûn êdî ne hewce ne ku şîfreyek têkevin. Piştre, di mîhengên vesazkirinê de, jêrîn biguherînin:

sudo nano /etc/ssh/sshd_config

têketina şîfreyê neçalak bike:

PasswordAuthentication no

Daemon sshd ji nû ve bidin destpêkirin:

sudo systemctl reload sshd

Naha heke hûn an kesek din hewl bide ku wekî root têkeve, ew ê têk nebe.

Dûv re, em dockerd saz dikin, ez ê pêvajoyê li vir venabêjim, ji ber ku her tişt dikare jixwe were guheztin, zencîreya malpera fermî bişopînin û gavên sazkirina dockerê li ser makîneya xweya virtual derbas bikin: https://docs.docker.com/install/linux/docker-ce/debian/

nifşê sertîfîkayê

Ji bo kontrolkirina docker daemon ji dûr ve, pêwendiyek TLS ya şîfrekirî hewce ye. Ji bo kirina vê yekê, hûn hewce ne ku sertîfîkayek û mifteyek ku hûn hewce ne ku çêbikin û veguhezînin makîneya xweya dûr. Gavên ku di rêwerzên li ser malpera fermî ya docker de hatine dayîn bişopînin: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Hemî pelên *.pem ên ji bo serverê hatine çêkirin, ango ca.pem, server.pem, key.pem, divê di pelrêça /etc/dockerê ya li ser serverê de werin danîn.

sazkirina dokerê

Di skrîpta destpêkirina docker daemon de, vebijarka -H df: // jêbirin, ev vebijark ji kîjan mêvandarê daemonê docker dikare were kontrol kirin.

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

Dûv re, heke ew jixwe tune be pelek mîhengan biafirînin û vebijarkan saz bikin:

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

Destûrê bide girêdanên li ser port 2376:

sudo ufw allow 2376

Dockerd bi mîhengên nû ji nû ve bidin destpêkirin:

sudo systemctl daemon-reload && sudo systemctl restart docker

Ka em kontrol bikin:

sudo systemctl status docker

Ger her tişt kesk be, wê hingê em difikirin ku me bi serfirazî docker li ser serverê mîheng kiriye.

Sazkirina radestkirina domdar li ser gitlab

Ji bo ku xebatkarê gitalab bikaribe fermanan li ser mêvandarek dockerê ya dûr bixebite, hûn hewce ne ku biryar bidin ka çawa û li ku derê sertîfîkayan û mifteyek ji bo girêdanek şîfrekirî bi dockerdê re hilîne. Min ev pirsgirêk bi tenê bi nivîsandina guhêrbarên di mîhengên gitlbab de çareser kir:

sernavê spoilerSazkirina CD bi rêya gitlab

Tenê naveroka sertîfîkayan û mifteyê bi riya pisîkê derxînin: cat ca.pem. Kopî bikin û bixin nav nirxên guhêrbar.

Ka em bi gitlab ve skrîptek binivîsin. Wêneyê docker-in-docker (dind) dê were bikar anîn.

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

Naveroka skrîpta bicîhkirinê bi şîroveyan:

bin/deploy.ş

#!/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

Pirsgirêka sereke ev bû ku naveroka sertîfîkayan di forma normal de ji guhêrbarên gitlab CI / CD "derxe". Min nikarî fêhm bikim ka çima girêdana bi mêvandarê dûr re nexebite. Min li têketina sudo journalctl -u dockerê ya li ser mêvandar nihêrî, di destan de xeletiyek heye. Min biryar da ku li tiştên ku bi gelemperî di guhêrbaran de têne hilanîn binihêrim, ji bo vê yekê hûn dikarin pisîkê -A $DOCKER_CERT_PATH/key.pem bibînin. Bi zêdekirina rakirina karaktera caret tr -d 'r', xeletî derbas kir.

Zêdetir, hûn dikarin li gorî viyana xwe peywirên piştî-serbestberdanê li skrîptê zêde bikin. Hûn dikarin guhertoya xebatê ya di depoya min de binihêrin https://gitlab.com/isqad/gitlab-ci-cd

Source: www.habr.com

Add a comment