Návod GitLab CICD¶
Na úvod bych chtěl zmínit, že dokumentace GitLabu je velmi dobrá a je vhodné z ní čerpat. Tento návod tedy spíše popisuje, jak udělat jednoduchou pipeline pro testování, linter, build a deploy webové aplikace založené na technologii Docker (resp. Docker-Compose) v prostředí GitLabu používaném na ZČU.
Zajímavá videa pro seznámení se s problematikou:
- https://www.youtube.com/watch?v=gr76MNXZJfQ
+ Big picture
+ Nezabíhá se příliš do detailů, ale je ukázáno čeho se dá dosáhnout, aneb hodí se vědět co vše to dokáže.
- https://www.youtube.com/watch?v=34u4wbeEYEo&list=PLaFCDlD-mVOlnL0f9rl3jyOHNdHU--vlJ&index=1
+ Indian guy saves the day :)
+ Víc prakticky zaměřené
+ Celá série
Testovací server¶
GitLab pipeline musí mít k dispozici server, na kterém se bude spouštět. V GitLabu ZČU je nainstalovaný shared runner (https://docs.gitlab.com/ee/ci/runners/), který lze využít. Jediný problém nastává tehdy, když je potřeba spouštět Docker jelikož sám tento gitlab-runner běží v Dockeru (alespoň je tomu tak nyní). V tomto případě narazíte na problematiku spuštění docker-in-docker (ne že by to nešlo udělat, ale přináší to s sebou jisté problémy).
Instalace gitlab-runner¶
- Pokud si tedy zřídíte vlastní testovací server (vřele doporučuji, budete mít nad ním plnou kontrolu a budete si moci dělat co chcete - když si na ZČU požádáte o server neměli byste mít potíže ho dostat), tak postupujte dle https://docs.gitlab.com/runner/install/linux-repository.html (nezapomeňte zvážit krok https://docs.gitlab.com/runner/install/linux-repository.html#disable-skel)
- Po instalaci proveďte registraci https://docs.gitlab.com/runner/register/ , doporučuji zvolit variantu shell tzn. každý příkaz v pipeline bude spuštěn v shellu.
- Doinstalujte si na server vše co budete k testování potřebovat např. Docker
- Pokud pipeline nefunguje, tak zkuste https://gitlab.com/gitlab-org/gitlab-runner/issues/4449 - stačí se přihlásit jako uživatel gitlab-runner a aplikovat řešní tzn. smazat soubor ~/.bash_logout
Tvorba pipeline¶
V kořenovém adresáři vytvořte soubor .gitlab-ci.yml, viz následující ukázka, který bude řídit celý proces.
stages:
- test
- linter
- build
- deploy
unit_tests:
stage: test
tags:
- test
script:
- cd website
- composer require --dev symfony/phpunit-bridge
- php bin/phpunit
php_linter:
stage: linter
tags:
- linter
script:
- cd website
- composer require --dev squizlabs/php_codesniffer
- ./vendor/bin/php-cs-fixer fix --dry-run --config .php_cs --stop-on-violation --using-cache=no
build:
stage: build
tags:
- build
script:
- docker-compose build
deploy_prod:
stage: deploy
tags:
- deploy
variables:
GIT_STRATEGY: none
environment:
name: heatmap
url: https://heatmap.zcu.cz
script:
- ssh root@myserver.zcu.cz "... whatever ..."
only:
- master
when: manual
- Celá pipeline běží vždy při změně repozitáře (pozn. lze změnit viz only a when např. nechcete deploy dělat automaticky a z jiných větví)
- Stages udává jednotlivé fáze pipeline, které buď projdou nebo selžou - pokud selže jedna fáze, tak navazující již nejsou spuštěny
- Dle tagu se dá přiřazovat různým testovacím serverům resp. gitlab-runnerům
- Script je to co de facto poběží v shellu testovacího serveru (nehledejte v tom vědu)
- Pokud nestanovíte jinak, tak se automaticky repo stáhne z GitLabu viz GIT_STRATEGY
Aktualizováno uživatelem Jakub Vašta před téměř 5 roky(ů) · 13 revizí