د ګیټلاب له لارې CD تنظیم کول

ما یوځل د خپلې پروژې د ګمارلو اتومات کولو په اړه فکر وکړ. gitlab.com په مهربانۍ سره د دې لپاره ټول وسیلې چمتو کوي ، او البته ما پریکړه وکړه چې له دې څخه ګټه واخلم ، دا یې په ګوته کړم او د پلي کولو کوچنۍ سکریپټ ولیکم. په دې مقاله کې زه خپلې تجربې له ټولنې سره شریکوم.

د تمديد؛ DR

  1. VPS تنظیم کړئ: روټ غیر فعال کړئ ، د پټنوم سره لاګ ان شئ ، ډاکرډ نصب کړئ ، ufw تنظیم کړئ
  2. د سرور او مراجعینو لپاره سندونه تولید کړئ docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl د tcp ساکټ له لارې د ډاکرډ کنټرول فعال کړئ: د ډاکر ترتیب څخه -H fd:// اختیار لرې کړئ.
  3. په docker.json کې سندونو ته لارې راجستر کړئ
  4. د سندونو مینځپانګې سره د CI/CD تنظیماتو کې د ګیټلاب متغیرونو کې راجستر کړئ. د ګمارلو لپاره سکریپټ .gitlab-ci.yml ولیکئ.

زه به د دیبیان توزیع ټول مثالونه وښیم.

د VPS ابتدايي ترتیب

نو تاسو د مثال په توګه یو مثال وپیرئ DO، لومړی شی چې تاسو یې کولو ته اړتیا لرئ د تیریدونکي بهرنۍ نړۍ څخه خپل سرور خوندي کړئ. زه به هیڅ شی ثابت یا ثابت نه کړم، زه به یوازې زما د مجازی سرور لوګ /var/log/پیغامونه وښیم:

سکرین شاټد ګیټلاب له لارې CD تنظیم کول

لومړی، د ufw فایروال نصب کړئ:

apt-get update && apt-get install ufw

راځئ چې ډیفالټ پالیسي فعاله کړو: ټولې راتلوونکې اړیکې بندې کړئ، ټولو وتلو اړیکو ته اجازه ورکړئ:

ufw default deny incoming
ufw default allow outgoing

مهم: د ssh له لارې اړیکې ته اجازه مه ورکوئ:

ufw allow OpenSSH

عمومي ترکیب په لاندې ډول دی: د پورټ له لارې اتصال ته اجازه ورکړئ: ufw اجازه 12345 ، چیرې چې 12345 د پورټ شمیره یا د خدماتو نوم دی. انکار: ufw انکار 12345

فایروال فعال کړئ:

ufw enable

موږ له غونډې څخه وځو او د ssh له لارې بیا ننوتل.

یو کارن اضافه کړئ، هغه ته یو پټنوم ورکړئ، او هغه د سوډو ګروپ ته اضافه کړئ.

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

بیا، د پلان سره سم، تاسو باید د پټنوم ننوتل غیر فعال کړئ. د دې کولو لپاره، خپل ssh کیلي سرور ته کاپي کړئ:

ssh-copy-id [email protected]

د سرور IP باید ستاسو وي. اوس هڅه وکړئ د هغه کارونکي په کارولو سره لاګ ان شئ چې تاسو مخکې جوړ کړی؛ تاسو نور اړتیا نلرئ پاسورډ دننه کړئ. بیا، د ترتیب ترتیباتو کې، لاندې بدل کړئ:

sudo nano /etc/ssh/sshd_config

د پټنوم ننوتل غیر فعال کړئ:

PasswordAuthentication no

د sshd ډیمون بیا پیل کړئ:

sudo systemctl reload sshd

اوس که تاسو یا بل څوک د روټ کارونکي په توګه د ننوتلو هڅه کوي، دا به کار ونکړي.

بیا ، ډاکرډ نصب کړئ ، زه به دلته پروسه تشریح نه کړم ، ځکه چې هرڅه دمخه بدلیدلی شي ، رسمي ویب پا toې ته لینک تعقیب کړئ او په خپل مجازی ماشین کې د ډاکر نصبولو مرحلو ته لاړشئ: https://docs.docker.com/install/linux/docker-ce/debian/

د سندونو تولید

د ډاکر ډیمون لرې کنټرول کولو لپاره ، د کوډ شوي TLS پیوستون ته اړتیا ده. د دې کولو لپاره، تاسو اړتیا لرئ یو سند او کیلي ولرئ، کوم چې باید تولید او ستاسو ریموټ ماشین ته لیږدول شي. په رسمي ډاکر ویب پا onه کې لارښوونو کې ورکړل شوي مرحلې تعقیب کړئ: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl د سرور لپاره ټول تولید شوي *.pem فایلونه، یعنې ca.pem، server.pem، key.pem، باید په سرور کې /etc/docker لارښود کې ځای په ځای شي.

د ډاکرډ ترتیب کول

د ډاکر ډیمون لانچ سکریپټ کې ، موږ د -H df:// اختیار لرې کوو ، دا اختیار ټاکي چې په کوم کوربه د ډاکر ډیمون کنټرول کیدی شي.

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

بیا، تاسو باید د ترتیباتو فایل جوړ کړئ، که دا دمخه شتون نلري، او اختیارونه مشخص کړئ:

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

راځئ چې په 2376 بندر کې اړیکو ته اجازه ورکړو:

sudo ufw allow 2376

راځئ چې د نوي ترتیباتو سره ډاکرډ بیا پیل کړو:

sudo systemctl daemon-reload && sudo systemctl restart docker

راځئ چې وګورو:

sudo systemctl status docker

که هرڅه "شنه" وي، نو بیا موږ فکر کوو چې موږ په سرور کې ډاکر په بریالیتوب سره تنظیم کړی دی.

په ګیټلاب کې د دوامداره تحویلي تنظیم کول

د دې لپاره چې د ګیتابابا کارمند وکولی شي په لرې پرتو ډاکر کوربه کې قوماندې اجرا کړي ، دا اړینه ده چې پریکړه وکړئ چې څنګه او چیرې سندونه ذخیره کړئ او د ډاکرډ سره د کوډ شوي اړیکې لپاره کیلي. ما دا ستونزه په ساده ډول د gitlbab ترتیباتو کې متغیرونو ته د لاندې اضافه کولو سره حل کړه:

سپوئلر سرلیکد ګیټلاب له لارې CD تنظیم کول

یوازې د سندونو مینځپانګې او کیلي د بلی له لارې تولید کړئ: cat ca.pem. د متغیر ارزښتونو کې کاپي او پیسټ کړئ.

راځئ چې د GitLab له لارې د ګمارنې لپاره سکریپټ ولیکو. د ډاکر-ان-ډاکر (ډینډ) عکس به وکارول شي.

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

د ګمارنې سکریپټ مینځپانګې د نظرونو سره:

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

اصلي ستونزه دا وه چې د سندونو مینځپانګې په نورمال شکل کې د ګیټلاب CI/CD متغیرونو څخه "راوباسي". زه نشم پوهیدم چې ولې د لیرې کوربه سره اړیکه کار نه کوي. په کوربه کې ما د log sudo journalctl -u docker ته وکتل، د لاس اخیستو پرمهال یوه تېروتنه وه. ما پریکړه وکړه چې وګورم هغه څه چې عموما په متغیرونو کې ساتل کیږي؛ د دې کولو لپاره، تاسو کولی شئ داسې وګورئ: بلی -A $DOCKER_CERT_PATH/key.pem. ما د کیریج کرکټر tr -d 'r' لرې کولو اضافه کولو سره تېروتنه کابو کړه.

بل ، تاسو کولی شئ په خپل اختیار کې سکریپټ ته د خپریدو وروسته دندې اضافه کړئ. تاسو کولی شئ زما په ذخیره کې کاري نسخه وګورئ https://gitlab.com/isqad/gitlab-ci-cd

سرچینه: www.habr.com

Add a comment