Hoʻonohonoho CD ma o gitlab

I kekahi manawa ua noʻonoʻo wau e pili ana i ka hoʻopili ʻana i kaʻu papahana. Hāʻawi maikaʻi ʻo gitlab.com i nā mea hana a pau no kēia, a ʻoiaʻiʻo ua hoʻoholo wau e hoʻohana pono iā ia, e noʻonoʻo ana a kākau i kahi palapala hoʻonohonoho liʻiliʻi. Ma kēia ʻatikala e haʻi aku au i koʻu ʻike me ke kaiāulu.

Aku; DR

  1. Hoʻonohonoho VPS: hoʻopau i ke aʻa, ka ʻōlelo huna, hoʻokomo i ka dockerd, hoʻonohonoho i ka ufw
  2. E hana i nā palapala hōʻoia no ke kikowaena a me ka mea kūʻai aku docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl E ho'ā i ka mana dockerd ma o tcp socket: wehe i ke koho -H fd:// mai ka docker config.
  3. E hoʻonoho i nā ala i nā palapala hōʻoia ma docker.json
  4. E hoʻopaʻa inoa i nā ʻano gitlab i nā hoʻonohonoho CI / CD me nā ʻike o nā palapala hōʻoia. Kākau i kahi palapala .gitlab-ci.yml no ka hoʻolālā ʻana.

E hōʻike wau i nā hiʻohiʻona āpau ma ka hāʻawi Debian.

Hoʻonohonoho VPS mua

Eia ʻoe i kūʻai ai i kahi laʻana no ka laʻana ma DO, ʻo ka mea mua e hana ai, ʻo ia ka pale ʻana i kāu kikowaena mai ka honua i waho. ʻAʻole wau e hōʻoia a ʻōlelo paha i kekahi mea, e hōʻike wale wau i ka log /var/log/messages o kaʻu kikowaena virtual:

KuiopiliHoʻonohonoho CD ma o gitlab

ʻO ka mua, e hoʻokomo i ka pā ahi ufw:

apt-get update && apt-get install ufw

E ho'ā i ke kulekele paʻamau: e ālai i nā pili komo mai, e ʻae i nā pilina puka waho:

ufw default deny incoming
ufw default allow outgoing

Mea nui: mai poina e ʻae i ka pilina ma ssh:

ufw allow OpenSSH

ʻO ka syntax maʻamau: E ʻae i ka pilina ma ke awa: ufw e ʻae iā 12345, kahi 12345 ka helu awa a i ʻole ka inoa lawelawe. Hōʻole: ufw hōʻole 12345

E hoʻā i ka pā ahi:

ufw enable

Haʻalele mākou i ka hālāwai a komo hou ma ssh.

Hoʻohui i kahi mea hoʻohana, hāʻawi iā ia i kahi ʻōlelo huna, a hoʻohui iā ia i ka hui sudo.

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

A laila, e like me ka hoʻolālā, pono ʻoe e hoʻopau i ka login password. e hana i kēia, kope i kāu kī ssh i ka kikowaena:

ssh-copy-id [email protected]

Pono ka ip o ke kikowaena iā ʻoe. I kēia manawa e ho'āʻo e komo ma lalo o ka mea hoʻohana i hana mua ʻia, ʻaʻole pono ʻoe e hoʻokomo hou i kahi ʻōlelo huna. A laila, i nā hoʻonohonoho hoʻonohonoho, hoʻololi i kēia:

sudo nano /etc/ssh/sshd_config

hoʻopau i ka ʻōlelo huna:

PasswordAuthentication no

E hoʻomaka hou i ka daemon sshd:

sudo systemctl reload sshd

I kēia manawa inā hoʻāʻo ʻoe a i ʻole kekahi mea ʻē aʻe e hoʻopaʻa inoa ma ke ʻano he kumu, e hāʻule.

A laila, hoʻokomo mākou i ka dockerd, ʻaʻole wau e wehewehe i ke kaʻina hana ma aneʻi, no ka mea hiki ke hoʻololi ʻia nā mea āpau, e hahai i ka loulou i ka pūnaewele official a hele i nā ʻanuʻu o ka hoʻokomo ʻana i ka docker ma kāu mīkini virtual: https://docs.docker.com/install/linux/docker-ce/debian/

Hoʻokumu palapala

No ka mālama ʻana i ka daemon docker ma kahi mamao, pono kahi pilina TLS i hoʻopili ʻia. No ka hana ʻana i kēia, pono ʻoe e loaʻa i kahi palapala hōʻoia a me kahi kī āu e pono ai e hana a hoʻoili i kāu mīkini mamao. E hahai i nā ʻanuʻu i hāʻawi ʻia i nā kuhikuhi ma ka pūnaewele docker official: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Pono e hoʻokomo ʻia nā faila *.pem a pau no ke kikowaena, ʻo ia hoʻi ca.pem, server.pem, key.pem, ma ka papa kuhikuhi /etc/docker ma ke kikowaena.

hoʻonohonoho docker

Ma ka palapala hoʻomaka docker daemon, wehe i ka -H df: // koho, e haʻi kēia koho i ka mea hoʻokipa e hiki ke hoʻokele ʻia ka daemon docker.

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

A laila, e hana i kahi faila inā ʻaʻole i loaʻa a hoʻonohonoho i nā koho:

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

ʻAe i nā pilina ma ke awa 2376:

sudo ufw allow 2376

Hoʻomaka hou i ka dockerd me nā hoʻonohonoho hou:

sudo systemctl daemon-reload && sudo systemctl restart docker

E nānā kākou:

sudo systemctl status docker

Inā ʻōmaʻomaʻo nā mea āpau, a laila manaʻo mākou ua hoʻonohonoho pono mākou i ka docker ma ke kikowaena.

Hoʻonohonoho i ka hoʻouna mau ʻana ma gitlab

I mea e hiki ai i ka mea hana gitalab ke hoʻokō i nā kauoha ma kahi kikowaena docker mamao, pono ʻoe e hoʻoholo pehea a me kahi e mālama ai i nā palapala hōʻoia a me kahi kī no kahi pili i hoʻopili ʻia i dockerd. Ua hoʻoponopono wau i kēia pilikia ma ke kākau ʻana i nā ʻano hoʻololi i nā hoʻonohonoho gitlbab:

poʻomanaʻo spoilerHoʻonohonoho CD ma o gitlab

E hoʻopuka wale i nā mea o nā palapala hōʻoia a me nā kī ma o ka cat: cat ca.pem. E kope a paʻi i loko o nā waiwai hoʻololi.

E kākau kākou i palapala no ka hoʻolaha ʻana ma o gitlab. E hoʻohana ʻia ke kiʻi 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 # скрипт деплоя тут

ʻO nā mea o ka palapala hoʻolālā me nā manaʻo:

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

ʻO ka pilikia nui ʻo ia ka "huki" i nā ʻike o nā palapala hōʻoia ma ke ʻano maʻamau mai nā ʻano gitlab CI / CD. ʻAʻole hiki iaʻu ke noʻonoʻo i ke kumu i hana ʻole ai ka pilina me ka host mamao. Nānā wau i ka sudo journalctl -u docker log ma ka mea hoʻokipa, aia kahi hewa me ka lima lima. Ua hoʻoholo wau e nānā i ka mea i mālama ʻia i nā mea hoʻololi, no kēia hiki iā ʻoe ke ʻike i ka pōpoki -A $DOCKER_CERT_PATH/key.pem. Ua lanakila ʻo ia i ka hewa ma ka hoʻohui ʻana i ka wehe ʻana i ke ʻano caret tr -d 'r'.

Eia hou, hiki iā ʻoe ke hoʻohui i nā hana ma hope o ka hoʻokuʻu ʻana i ka palapala i kāu manaʻo. Hiki iā ʻoe ke nānā i ka mana hana ma kaʻu waihona https://gitlab.com/isqad/gitlab-ci-cd

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka