Projekt

Obecné

Profil

Návod GitLab CICD » Historie » Revize 5

Revize 4 (Jakub Vašta, 2020-05-20 18:21) → Revize 5/13 (Jakub Vašta, 2020-05-20 18:28)

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é 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 neswtanovíte jinak, tak se automaticky repo stáhne z GitLabu viz GIT_STRATEGY