Mametraka CD amin'ny gitlab

Nieritreritra ny hanao automatique ny fametrahana ny tetikasako aho indray mandeha. Ny gitlab.com dia manome tsara ny fitaovana rehetra ho an'izany, ary mazava ho azy fa nanapa-kevitra ny hanararaotra izany aho, hamantatra izany ary hanoratra script fandefasana kely. Amin'ity lahatsoratra ity dia mizara ny traikefako amin'ny fiarahamonina aho.

TL, DR

  1. Manangana VPS: esory ny fakany, midira amin'ny tenimiafina, mametraka dockerd, manamboatra ufw
  2. Mamorona taratasy fanamarinana ho an'ny mpizara sy mpanjifa docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Alefaso ny fanaraha-maso dockerd amin'ny alΓ lan'ny tcp socket: esory ny safidy -H fd:// amin'ny docker config.
  3. Soraty ny lalana mankany amin'ny fanamarinana ao amin'ny docker.json
  4. Misoratra anarana amin'ny gitlab variables amin'ny fikandrana CI/CD miaraka amin'ny votoatin'ny fanamarinana. Manorata script .gitlab-ci.yml ho fametrahana.

Hasehoko ny ohatra rehetra momba ny fizarana Debian.

Fametrahana VPS voalohany

Ka nividy ohatra ianao ohatra tamin'ny DO, ny zavatra voalohany tokony hataonao dia ny miaro ny mpizaranao amin'ny tontolo ivelany mahery setra. Tsy hanaporofo na hanamafy na inona na inona aho, hasehoko fotsiny ny log /var/log/messages of my virtual server:

БкÑ € инÑоÑ,Mametraka CD amin'ny gitlab

Voalohany, apetraho ny firewall ufw:

apt-get update && apt-get install ufw

Alefaso ny politikan'ny default: sakanana ny fifandraisana miditra rehetra, avelao ny fifandraisana mivoaka rehetra:

ufw default deny incoming
ufw default allow outgoing

Zava-dehibe: aza adino ny mamela ny fifandraisana amin'ny ssh:

ufw allow OpenSSH

Ny fehezanteny ankapobeny dia toy izao: Avelao hifandray amin'ny seranan-tsambo: ufw mamela 12345, izay 12345 no laharana seranan-tsambo na anaran'ny serivisy. Deny: ufw deny 12345

Alefaso ny firewall:

ufw enable

Mivoaka ny session izahay ary miditra indray amin'ny ssh.

Ampio mpampiasa iray, omeo tenimiafina ary ampio izy ao amin'ny vondrona sudo.

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

Manaraka, araka ny drafitra, dia tokony hanaisotra ny tenimiafina fidirana. Mba hanaovana izany, kopia ny fanalahidin'ny ssh anao amin'ny mpizara:

ssh-copy-id [email protected]

Ny ip mpizara dia tsy maintsy anao. Andramo izao ny miditra amin'ny alΓ lan'ny mpampiasa noforoninao teo aloha; tsy mila mampiditra tenimiafina intsony ianao. Manaraka, ao amin'ny firafitry ny configuration, hanova izao manaraka izao:

sudo nano /etc/ssh/sshd_config

esory ny tenimiafina fidirana:

PasswordAuthentication no

Avereno indray ny daemon sshd:

sudo systemctl reload sshd

Amin'izao fotoana izao raha toa ianao na olon-kafa manandrana miditra amin'ny maha-mpampiasa faka azy dia tsy mandeha izany.

Manaraka, apetraho ny dockerd, tsy hamariparitra ny dingana eto aho, satria efa azo ovaina ny zava-drehetra, araho ny rohy mankany amin'ny tranokala ofisialy ary mandehana amin'ny dingana fametrahana docker amin'ny milina virtoaly anao: https://docs.docker.com/install/linux/docker-ce/debian/

Mamorona taratasy fanamarinana

Mba hifehezana ny daemon docker avy lavitra dia ilaina ny fifandraisana TLS misy encryption. Mba hanaovana izany dia mila manana taratasy fanamarinana sy lakile ianao, izay tsy maintsy amboarina sy afindra any amin'ny milina lavitra anao. Araho ny dingana omena ao amin'ny torolΓ lana ao amin'ny tranokalan'ny docker ofisialy: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Ny rakitra *.pem rehetra noforonina ho an'ny mpizara, izany hoe ca.pem, server.pem, key.pem, dia tsy maintsy apetraka ao amin'ny lahatahiry /etc/docker amin'ny mpizara.

Fametrahana dockerd

Ao amin'ny script fanombohana daemon docker dia esorinay ny safidy -H df://, ity safidy ity dia mamaritra hoe iza no mpampiantrano ny daemon docker azo fehezina.

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

Manaraka, tokony hamorona fisie fikandrana ianao, raha tsy mbola misy izany, ary mamaritra ny safidy:

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

Andeha isika hamela fifandraisana amin'ny port 2376:

sudo ufw allow 2376

Andao hanomboka indray ny dockerd miaraka amin'ireo fanovana vaovao:

sudo systemctl daemon-reload && sudo systemctl restart docker

Andeha hojerentsika:

sudo systemctl status docker

Raha "maitso" ny zava-drehetra, dia heverintsika fa nahavita nanamboatra docker tamin'ny mpizara.

Mametraka fandefasana tsy tapaka amin'ny gitlab

Mba hahafahan'ny mpiasa Gitalaba afaka manatanteraka baiko amin'ny mpampiantrano Docker lavitra, dia ilaina ny manapa-kevitra ny fomba sy ny toerana hitahirizana ny mari-pankasitrahana sy ny lakile ho an'ny fifandraisana misy miafina miaraka amin'i Dockerd. Namaha ity olana ity aho tamin'ny fampidirana fotsiny ireto manaraka ireto amin'ny variables ao amin'ny fikandrana gitlbab:

Lohateny spoilerMametraka CD amin'ny gitlab

Alefaso fotsiny amin'ny alΓ lan'ny cat ny votoatin'ny mari-pankasitrahana sy fanalahidy: cat ca.pem. Adikao sy apetaho amin'ny sanda miovaova.

Andao hanoratra script ho an'ny fametrahana amin'ny alΓ lan'ny GitLab. Ny sary docker-in-docker (dind) no hampiasaina.

.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 # скрипт дСплоя Ρ‚ΡƒΡ‚

Ny votoatin'ny script fametrahana miaraka amin'ny fanehoan-kevitra:

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

Ny olana lehibe dia ny "misintona" ny votoatin'ny mari-pankasitrahana amin'ny endrika mahazatra avy amin'ny gitlab CI / CD variables. Tsy azoko hoe nahoana no tsy mandeha ny fifandraisana amin'ny mpampiantrano lavitra. Tao amin'ny mpampiantrano aho dia nijery ny log sudo journalctl -u docker, nisy hadisoana nandritra ny fifampikasohana. Nanapa-kevitra ny hijery izay voatahiry amin'ny ankapobeny amin'ny variables aho, mba hanaovana izany dia azonao atao ny mijery toy izao: cat -A $DOCKER_CERT_PATH/key.pem. Nandresy ny hadisoana aho tamin'ny fampidirana ny fanesorana ny toetran'ny fiara tr -d 'r'.

Manaraka izany dia azonao atao ny manampy asa aorian'ny famoahana ny script araka ny fanapahan-kevitrao. Azonao atao ny mijery ny dikan-teny miasa ao amin'ny fitahirizanao https://gitlab.com/isqad/gitlab-ci-cd

Source: www.habr.com

Add a comment