Návod GitLab CICD » Historie » Revize 4
Revize 3 (Jakub Vašta, 2020-05-20 18:17) → Revize 4/13 (Jakub Vašta, 2020-05-20 18:21)
h1. Návod GitLab CICD
Na úvod bych chtěl zmínit, že okumentace 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
h2. 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í) a 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).
h3. 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 moct 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 (nezapomeňte na krok https://docs.gitlab.com/runner/install/linux-repository.html#disable-skel) dle https://docs.gitlab.com/runner/install/linux-repository.html
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*
h2. 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.
<pre><code class="yaml">
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
</code></pre>
* 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 neswtanovíte jinak, tak se automaticky repo stáhne z GitLabu viz GIT_STRATEGY