Настройка CD Ρ‡Π΅Ρ€Π΅Π· gitlab

Задумался ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ€Π°Π· я ΠΎΠ± Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ развСртывания своСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. gitlab.com любСзно прСдоставляСт для этого всС инструмСнты, ΠΈ я ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Ρ€Π΅ΡˆΠΈΠ» Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π²ΡˆΠΈΡΡŒ ΠΈ написав нСбольшой сцСнарий дСплоя. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я дСлюсь своим ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ с сообщСством.

TL;DR

  1. ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ VPS: ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ root, Π²Ρ…ΠΎΠ΄ ΠΏΠΎ ΠΏΠ°Ρ€ΠΎΠ»ΡŽ, ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ dockerd, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ufw
  2. Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСртификаты для сСрвСра ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ dockerd Ρ‡Π΅Ρ€Π΅Π· tcp сокСт: ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ -H fd:// ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° Π΄ΠΎΠΊΠ΅Ρ€Π°.
  3. ΠŸΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡƒΡ‚ΠΈ Π΄ΠΎ сСртификатов Π² docker.json
  4. ΠŸΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ gitlab Π² настройках CI/CD с содСрТимым сСртификатов. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипт .gitlab-ci.yml для дСплоя.

ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ я Π±ΡƒΠ΄Ρƒ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° дистрибутивС Debian.

ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ настройка VPS

Π’ΠΎΡ‚ Π²Ρ‹ ΠΊΡƒΠΏΠΈΠ»ΠΈ инстанс Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° DO, ΠΏΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ, это Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ваш сСрвСр ΠΎΡ‚ агрСссивного внСшнСго ΠΌΠΈΡ€Π°. Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, просто ΠΏΠΎΠΊΠ°ΠΆΡƒ Π»ΠΎΠ³ /var/log/messages своСго Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сСрвСра:

Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ΠΠ°ΡΡ‚Ρ€ΠΎΠΉΠΊΠ° CD Ρ‡Π΅Ρ€Π΅Π· gitlab

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ… установим Ρ„Π°ΠΉΠ΅Ρ€Π²ΠΎΠ» ufw:

apt-get update && apt-get install ufw

Π’ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌ всС входящиС соСдинСния, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌ всС исходящиС соСдинСния:

ufw default deny incoming
ufw default allow outgoing

Π’Π°ΠΆΠ½ΠΎ: Π½Π΅ Π·Π°Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ соСдинСниС ΠΏΠΎ ssh:

ufw allow OpenSSH

ΠžΠ±Ρ‰ΠΈΠΉ синтаксис Ρ‚Π°ΠΊΠΎΠΉ: Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ соСдинСниС ΠΏΠΎ ΠΏΠΎΡ€Ρ‚Ρƒ: ufw allow 12345, Π³Π΄Π΅ 12345 β€” Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° ΠΈΠ»ΠΈ ΠΆΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ сСрвиса. Π—Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ: ufw deny 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, Ρƒ Π½Π΅Π³ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ получится.

Π”Π°Π»Π΅Π΅ ставим dockerd, Ρ‚ΡƒΡ‚ процСсс ΡƒΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ, сходитС ΠΏΠΎ ссылкС Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ сайт ΠΈ ΠΏΡ€ΠΎΠΉΠ΄ΠΈΡ‚Π΅ этапы установки docker Π½Π° Π²Π°ΡˆΡƒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΊΡƒ: https://docs.docker.com/install/linux/docker-ce/debian/

ГСнСрация сСртификатов

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ Π΄ΠΎΠΊΠ΅Ρ€Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎ трСбуСтся ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ TLS соСдинСниС. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ сСртификат ΠΈ ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π΄ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ пСрСнСсти Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ Π²Π°ΡˆΡƒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ. Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ шагам, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π² инструкции Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС docker: 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 Π½Π° сСрвСрС.

Настройка dockerd

Π’ сцСнарии запуска Π΄Π΅ΠΌΠΎΠ½Π° 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

Если всС Β«Π·Π΅Π»Π΅Π½ΠΎΠ΅Β», Ρ‚ΠΎ считаСм, Ρ‡Ρ‚ΠΎ Π½Π° сСрвСрС ΠΌΡ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ настроили docker.

Настройка continuous deleivery Π½Π° gitlab

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡ€ΠΊΠ΅Ρ€ Π³ΠΈΡ‚Π°Π»Π°Π±Π° смог Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ хостС Π΄ΠΎΠΊΠ΅Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ, ΠΊΠ°ΠΊ ΠΈ Π³Π΄Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сСртификаты ΠΈ ΠΊΠ»ΡŽΡ‡ для ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ соСдинСния с dockerd. Π― Ρ€Π΅ΡˆΠΈΠ» Π΄Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ просто прописав Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² настройках gitlbab:

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ спойлСраНастройка CD Ρ‡Π΅Ρ€Π΅Π· gitlab

ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚Π΅ содСрТимоС сСртификатов ΠΈ ΠΊΠ»ΡŽΡ‡Π° Ρ‡Π΅Ρ€Π΅Π· cat: cat ca.pem. ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈ вставляСтС Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΎΠΏΠΈΡˆΠ΅ΠΌ сцСнарий для дСплоя Ρ‡Π΅Ρ€Π΅Π· Π³ΠΈΡ‚Π»Π°Π±. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ 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 содСрТимоС сСртификатов Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅. Π― Π½Π΅ ΠΌΠΎΠ³ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ соСдинСниС с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ хостом. На хостС посмотрСл ΠΆΡƒΡ€Π½Π°Π» sudo journalctl -u docker, Ρ‚Π°ΠΌ ошибка ΠΏΡ€ΠΈ Ρ€ΡƒΠΊΠΎΠΏΠΎΠΆΠ°Ρ‚ΠΈΠΈ. РСшил Π³Π»ΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ cat -A $DOCKER_CERT_PATH/key.pem. ΠžΡˆΠΈΠ±ΠΊΡƒ ΠΏΠΎΠ±ΠΎΡ€ΠΎΠ», Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ символа ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ tr -d ‘r’.

Π”Π°Π»Π΅Π΅ Π² сцСнарий ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ пост-Ρ€Π΅Π»ΠΈΠ·Π½Ρ‹Π΅ таски Π½Π° своС усмотрСниС. ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ вСрсиСй ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π² ΠΌΠΎΠ΅ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ https://gitlab.com/isqad/gitlab-ci-cd

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com