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
- 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
- Vytvoříme v GitLabu „new project“
- Na lokálním prostředí provedeme Git Clone projektu
- 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
- 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.
