Nastavení CI/CD

Automatizovat, automatizovat, automatizovat… nikdo nechce dělat opakující se činnosti

Vybral jsem svůj osobní historický testovací projekt webovedomeny.cz, na kterém si vše vyzkouším.

Potřebuji zajistit

  • upgrade PHP z verze 5.6 na PH 7.4 (pomocí PHP Rector)
  • přesun projektu na GitLab
  • přesun projektu na hosting s PHP 7.4
  • automatizovat proces přenos nové verze z testovacího na produkční prostředí (CI/CD).

Tento článek se bude věnovat pouze automatizaci přenosu na produkční prostředí, tj. v praxi využití CI/CD (Continous integration a continous delivery). Základ je mít root přístup k serveru, lze použít např. na tomto hostingu.

Postup nasazení CI/CD

  1. Registrace na GitLab.com, pro hostovanou verzi. Můžete provést i vlastní instanci GitLabu na svém serveru, viz článek Jak nainstalovat GitLab
  2. Vytvoříme v GitLabu „new project“
  3. Na lokálním prostředí provedeme Git Clone projektu
  4. V lokálním projektu vytvoříme 3 důležité soubory
    • .gitignore – seznam souborů a složek, které bude Git ignorovat
    • .gitlab-ci.yml – skript s pravidly pro deploy
    • .deploy_ignore – seznam složek, které se budou ignorovat při deploy
  5. Instalace GitLab runneru

Instalace GiLab runneru

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash

Nainstalování runneru

sudo apt-get install gitlab-runner

Zaregistrujeme runner

sudo gitlab-runner register

Po zadání příkazů budete vyzváni k zadání URL, kde vám běží GitLab (gitlab-ci coordinator URL)

Z nastavení projektu v GitLabu vložte Runner token

Cesta: Setting > CI / CD > Runners > Set up a specific Runner manually

Následně budete vyzvání k:

  • zadání „popisu runneru“: volím např. runner-webovedomeny
  • výběr tagu pro provádění runneru: volím deploy, viz soubor .gitlab-ci.yml
  • zvolení Runner executor, pro své potřeby volím shell, další možnosti výběru jsou popsány Compatibility chart
root@min08-radim-krpec ~ # sudo gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=21628 revision=4c96e5ad version=12.9.0
Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.com/
Please enter the gitlab-ci token for this runner:
-bTiybsxEkEUzujfG8Jt
Please enter the gitlab-ci description for this runner:
[min08-radim-krpec.vas-server.cz]: runner-webovedomeny
Please enter the gitlab-ci tags for this runner (comma separated):
deploy
Registering runner... succeeded                     runner=-bTiybsx
Please enter the executor: ssh, docker+machine, docker-ssh+machine, custom, docker-ssh, parallels, shell, virtualbox, kubernetes, docker:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Vytvoříme uživatele „deploy“ useradd -m -s /bin/bash deploy.

Nastavení SSH klíče:

Přihlásím se za su gitlab-runner vygeneruji SSH klíč ssh-keygen -o -t rsa -b 4096 (můžete nechat default cestu a nepoužívat heslo, tj. 2x enter).

Vygenerovaný klič vložíme uživateli su deploy do ~/.ssh/authorized_keys Nastavím SSH klíče a vše by již mělo fungovat

Naposled jen pod root uživatelem přidáme uživateli deploy práva na rsync. Do souboru /etc/sudoers.d/deploy vložíme:
deploy ALL=(root) NOPASSWD:/usr/bin/rsync,/usr/sbin/nginx
deploy ALL=(www-data) NOPASSWD:ALL

Nastavíme práva na tento soubor chmod 0440 /etc/sudoers.d/deploy

Nyní by již mělo CI/CD fungovat a změny pushnuté do repozitáře by se měly projevit na produkční i dev verzi projektu (můžete zkontrolovat pomocí FTP).

Stav přesunu změn můžete sledovat v GitLabu v CI / CD > Pipelines. Pokud se něco nepodaří, tak pipelina bude bude ve stav „failed“ a popis problému, který je srozumitelný a Google poradí, jak dále postupovat.

Read More