Projekt

Obecné

Profil

Návod GitLab CICD » Historie » Verze 12

Jakub Vašta, 2020-05-20 18:33

1 1 Jakub Vašta
h1. Návod GitLab CICD
2
3
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.
4
5
Zajímavá videa pro seznámení se s problematikou:
6
> * https://www.youtube.com/watch?v=gr76MNXZJfQ
7
> + Big picture
8
> + 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.
9
10
> * https://www.youtube.com/watch?v=34u4wbeEYEo&list=PLaFCDlD-mVOlnL0f9rl3jyOHNdHU--vlJ&index=1
11
> + Indian guy saves the day :)
12
> + Víc prakticky zaměřené
13
> + Celá série
14
15
h2. Testovací server
16
17 6 Jakub Vašta
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).
18 1 Jakub Vašta
19
h3. Instalace gitlab-runner
20 2 Jakub Vašta
21 11 Jakub Vašta
* 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)
22 1 Jakub Vašta
23 11 Jakub Vašta
* 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.
24 1 Jakub Vašta
25 11 Jakub Vašta
* Doinstalujte si na server vše co budete k testování potřebovat např. _Docker_
26 10 Jakub Vašta
27 11 Jakub Vašta
* 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*
28 4 Jakub Vašta
29 1 Jakub Vašta
h2. Tvorba pipeline
30 2 Jakub Vašta
31 1 Jakub Vašta
V kořenovém adresáři vytvořte soubor _.gitlab-ci.yml_, viz následující ukázka, který bude řídit celý proces. 
32
33
<pre><code class="yaml">
34
35
stages:
36
    - test
37
    - linter
38
    - build
39
    - deploy
40
41
unit_tests:
42
    stage: test
43
    tags:
44
        - test
45
    script:
46
        - cd website
47
        - composer require --dev symfony/phpunit-bridge
48
        - php bin/phpunit
49
50
php_linter: 
51
    stage: linter
52
    tags:
53
        - linter
54
    script:
55
        - cd website
56
        - composer require --dev squizlabs/php_codesniffer
57
        - ./vendor/bin/php-cs-fixer fix --dry-run --config .php_cs --stop-on-violation --using-cache=no
58
build:
59
    stage: build
60
    tags:
61
        - build
62
    script:
63
        - docker-compose build
64
        
65
deploy_prod:
66
    stage: deploy
67
    tags:
68
        - deploy
69
    variables:
70
        GIT_STRATEGY: none
71
    environment:
72
        name: heatmap
73
        url: https://heatmap.zcu.cz
74
    script:
75
        - ssh root@myserver.zcu.cz "... whatever ..."
76
    only:
77
        - master
78
    when: manual
79
80
</code></pre>
81
82 3 Jakub Vašta
* 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í)
83 5 Jakub Vašta
* *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
84 1 Jakub Vašta
* Dle *tagu* se dá přiřazovat různým testovacím serverům resp. gitlab-runnerům
85 3 Jakub Vašta
* *Script* je to co de facto poběží v shellu testovacího serveru (nehledejte v tom vědu)
86 5 Jakub Vašta
* Pokud nestanovíte jinak, tak se automaticky repo stáhne z GitLabu viz GIT_STRATEGY