gitlab හරහා CD පිහිටුවීම

මම වරක් මගේ ව්‍යාපෘතියේ යෙදවීම ස්වයංක්‍රීය කිරීම ගැන සිතුවෙමි. gitlab.com මේ සඳහා සියලුම මෙවලම් කාරුණිකව සපයන අතර, ඇත්ත වශයෙන්ම මම එයින් ප්‍රයෝජන ගැනීමට තීරණය කළෙමි, එය හඳුනාගෙන කුඩා යෙදවුම් පිටපතක් ලිවීමට තීරණය කළෙමි. මෙම ලිපියෙන් මම මගේ අත්දැකීම් සමාජය සමඟ බෙදා ගන්නෙමි.

TL; ඩී

  1. VPS සකසන්න: root අක්‍රිය කරන්න, මුරපදය සමඟ ලොග් වන්න, dockerd ස්ථාපනය කරන්න, ufw වින්‍යාස කරන්න
  2. සේවාදායකය සහ සේවාදායකයා සඳහා සහතික ජනනය කරන්න docs.docker.com/engine/security/https/#create-a-ca-server-and-Client-keys-with-openssl tcp සොකට් හරහා dockerd පාලනය සබල කරන්න: ඩොකර් වින්‍යාසයෙන් -H fd:// විකල්පය ඉවත් කරන්න.
  3. docker.json හි සහතික සඳහා මාර්ග ලියාපදිංචි කරන්න
  4. සහතිකවල අන්තර්ගතය සමඟ CI/CD සැකසුම් තුළ gitlab විචල්‍යවල ලියාපදිංචි වන්න. යෙදවීම සඳහා .gitlab-ci.yml පිටපතක් ලියන්න.

මම ඩේබියන් බෙදාහැරීමේ සියලුම උදාහරණ පෙන්වන්නම්.

මූලික VPS සැකසුම

එබැවින් ඔබ උදාහරණයක් ලෙස උදාහරණයක් මිල දී ගෙන ඇත DO, ඔබ කළ යුතු පළමු දෙය නම් ආක්‍රමණශීලී බාහිර ලෝකයෙන් ඔබේ සේවාදායකය ආරක්ෂා කිරීමයි. මම කිසිවක් ඔප්පු කරන්නේ හෝ ප්‍රකාශ කරන්නේ නැත, මම මගේ අතථ්‍ය සේවාදායකයේ ලොගය /var/log/messages පෙන්වන්නම්:

තිර රුවgitlab හරහා 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 හරහා ලොග් වෙමු.

පරිශීලකයෙකු එක් කරන්න, ඔහුට මුරපදයක් පවරන්න, සහ ඔහුව sudo කණ්ඩායමට එක් කරන්න.

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

දැන් ඔබ හෝ වෙනත් අයෙකු root පරිශීලකයා ලෙස ලොග් වීමට උත්සාහ කළහොත් එය ක්රියා නොකරයි.

ඊළඟට, ඩොකර්ඩ් ස්ථාපනය කරන්න, මම මෙහි ක්‍රියාවලිය විස්තර නොකරමි, සියල්ල දැනටමත් වෙනස් කළ හැකි බැවින්, නිල වෙබ් අඩවියට සබැඳිය අනුගමනය කර ඔබේ අතථ්‍ය යන්ත්‍රයේ ඩොකර් ස්ථාපනය කිරීමේ පියවර හරහා යන්න: https://docs.docker.com/install/linux/docker-ce/debian/

සහතික උත්පාදනය කිරීම

ඩොකර් ඩීමන් දුරස්ථව පාලනය කිරීමට, සංකේතාත්මක TLS සම්බන්ධතාවයක් අවශ්‍ය වේ. මෙය සිදු කිරීම සඳහා, ඔබට සහතිකයක් සහ යතුරක් තිබිය යුතුය, එය උත්පාදනය කර ඔබේ දුරස්ථ යන්ත්රයට මාරු කළ යුතුය. නිල ඩොකර් වෙබ් අඩවියේ උපදෙස් වල දක්වා ඇති පියවර අනුගමනය කරන්න: 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

අපි නව සැකසුම් සමඟ dockerd නැවත ආරම්භ කරමු:

sudo systemctl daemon-reload && sudo systemctl restart docker

අපි පරීක්ෂා කරමු:

sudo systemctl status docker

සෑම දෙයක්ම “කොළ” නම්, අපි සේවාදායකයේ ඩොකර් සාර්ථකව වින්‍යාස කර ඇති බව අපි සලකමු.

gitlab මත අඛණ්ඩ බෙදා හැරීමක් පිහිටුවීම

Gitalaba සේවකයාට දුරස්ථ ඩොකර් ධාරකයක විධාන ක්‍රියාත්මක කිරීමට හැකි වීම සඳහා, සහතික ගබඩා කරන්නේ කෙසේද සහ කොතැනද යන්න තීරණය කිරීම සහ Dockerd සමඟ සංකේතාත්මක සම්බන්ධතාවයක් සඳහා යතුර තීරණය කිරීම අවශ්‍ය වේ. gitlbab සැකසුම් වල ඇති විචල්‍ය වලට පහත සඳහන් දෑ එකතු කිරීමෙන් මම මෙම ගැටළුව විසඳා ගත්තෙමි:

ස්පොයිලර් මාතෘකාවgitlab හරහා CD පිහිටුවීම

සහතිකවල අන්තර්ගතය සහ යතුර cat හරහා ප්‍රතිදානය කරන්න: cat ca.pem. විචල්‍ය අගයන් වෙත පිටපත් කර අලවන්න.

GitLab හරහා යෙදවීම සඳහා පිටපතක් ලියමු. 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 # скрипт деплоя тут

අදහස් සහිත යෙදවුම් ස්ක්‍රිප්ටයේ අන්තර්ගතය:

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

ප්‍රධාන ගැටලුව වූයේ gitlab CI/CD විචල්‍ය වලින් සහතික වල අන්තර්ගතය සාමාන්‍ය ආකාරයෙන් “අදින්න” කිරීමයි. දුරස්ථ ධාරකයට සම්බන්ධය ක්‍රියා නොකරන්නේ මන්දැයි මට සිතාගත නොහැකි විය. සත්කාරකයේ මම log sudo journalctl -u docker එක බැලුවා, අතට අත දීමේදී දෝෂයක් ඇති විය. සාමාන්‍යයෙන් විචල්‍යයන් තුළ ගබඩා කර ඇති දේ බැලීමට මම තීරණය කළෙමි; මෙය සිදු කිරීම සඳහා, ඔබට මේ ආකාරයෙන් පෙනිය හැක: cat -A $DOCKER_CERT_PATH/key.pem. tr -d 'r' යන carriage අක්ෂරය ඉවත් කිරීම එකතු කිරීමෙන් මම දෝෂය ජය ගත්තෙමි.

මීළඟට, ඔබට ඔබේ අභිමතය පරිදි ස්ක්‍රිප්ටයට පශ්චාත්-නිකුතු කාර්යයන් එක් කළ හැක. ඔබට මගේ ගබඩාවේ වැඩ කරන අනුවාදය නැරඹිය හැකිය https://gitlab.com/isqad/gitlab-ci-cd

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න