Návod GitLab CICD » Historie » Verze 7
Jakub Vašta, 2020-05-20 18:30
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 | 7 | 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 (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 |
22 | 1 | 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. |
23 | Doinstalujte si na server vše co budete k testování potřebovat např. _Docker_ |
||
24 | |||
25 | 4 | 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* |
26 | |||
27 | 1 | Jakub Vašta | h2. Tvorba pipeline |
28 | 2 | Jakub Vašta | |
29 | 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. |
30 | |||
31 | <pre><code class="yaml"> |
||
32 | |||
33 | stages: |
||
34 | - test |
||
35 | - linter |
||
36 | - build |
||
37 | - deploy |
||
38 | |||
39 | unit_tests: |
||
40 | stage: test |
||
41 | tags: |
||
42 | - test |
||
43 | script: |
||
44 | - cd website |
||
45 | - composer require --dev symfony/phpunit-bridge |
||
46 | - php bin/phpunit |
||
47 | |||
48 | php_linter: |
||
49 | stage: linter |
||
50 | tags: |
||
51 | - linter |
||
52 | script: |
||
53 | - cd website |
||
54 | - composer require --dev squizlabs/php_codesniffer |
||
55 | - ./vendor/bin/php-cs-fixer fix --dry-run --config .php_cs --stop-on-violation --using-cache=no |
||
56 | build: |
||
57 | stage: build |
||
58 | tags: |
||
59 | - build |
||
60 | script: |
||
61 | - docker-compose build |
||
62 | |||
63 | deploy_prod: |
||
64 | stage: deploy |
||
65 | tags: |
||
66 | - deploy |
||
67 | variables: |
||
68 | GIT_STRATEGY: none |
||
69 | environment: |
||
70 | name: heatmap |
||
71 | url: https://heatmap.zcu.cz |
||
72 | script: |
||
73 | - ssh root@myserver.zcu.cz "... whatever ..." |
||
74 | only: |
||
75 | - master |
||
76 | when: manual |
||
77 | |||
78 | </code></pre> |
||
79 | |||
80 | 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í) |
81 | 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 |
82 | 1 | Jakub Vašta | * Dle *tagu* se dá přiřazovat různým testovacím serverům resp. gitlab-runnerům |
83 | 3 | Jakub Vašta | * *Script* je to co de facto poběží v shellu testovacího serveru (nehledejte v tom vědu) |
84 | 5 | Jakub Vašta | * Pokud nestanovíte jinak, tak se automaticky repo stáhne z GitLabu viz GIT_STRATEGY |
85 | 1 | Jakub Vašta |