Tato prezentace nabízí úvod do GitLab CI/CD (Continuous Integration/Continuous Deployment), nástroje pro automatizaci vývoje a nasazení softwaru. Seznámíte se s klíčovými koncepty GitLab CI/CD, jako je tvorba pipeline, automatizované testování a nasazení. Prezentace obsahuje praktické příklady použití, tipy a triky pro efektivní konfiguraci CI/CD pipeline, což usnadní práci vývojářům a DevOps týmům. Ideální pro začátečníky i pokročilé, kteří chtějí optimalizovat své pracovní postupy s GitLab CI/CD.
2. Obsah
What is CI/CD …………………………...……………………………………………….
GitLab Runner …………………………….…………………………………………….
GitLab yml ……………………………………………………………………………….
GitLab Variables ……………………………………………………………………….
2
3. What is CI/CD?
3
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
4. Continuous Integration
Continuous Delivery
Continuous Deployment
1. Code changes (push to GIT)
2. Build *
3. Automate Testing
4. Test Not OK
5. Report to Developer
6. Developer Fix bugs - return
to step 1
7. Test OK
6. Build *
7. Deploy to repository
8. Managed Approve to
deploy to production
9. Build *
10. Deploy to repository
11. Automate deploy to
production
CI/CD
4
5. CI/CD
5
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Zkráceně lze říct, že
● Continuous Integration zajišťuje automatickou integraci kódu,
● Continuous Deployment zajišťuje automatické nasazení a
● Continuous Delivery zajišťuje, že software je připraven k nasazení, ale nasazen není automaticky.
6. Runners
6
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
7. Runners
7
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
● Shared
● Specific
● Shared
● Specific
8. Runners Registration
8
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Register:
docker run
--rm
-t -i
-v /srv/gitlab-runner/config:/etc/gitlab-runner
-v /var/run/docker.sock:/var/run/docker.sock
gitlab/gitlab-runner register -n
--url "https://gitlab.bootiq.io/"
--registration-token "<<token>>"
--executor docker
--description "monet-docker-runner-1"
--docker-image "alpine:latest"
--tag-list "docker,aws"
Run:
docker run -d --name gitlab-runner
--restart always
-v /srv/gitlab-runner/config:/etc/gitlab-runner
-v /var/run/docker.sock:/var/run/docker.sock
gitlab/gitlab-runner:latest
9. Základní pojmy - Pipeline
9
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Reference : https://docs.gitlab.com/ee/ci/pipelines/
● popisuje celý proces sestavování, testování a nasazování aplikace
● je plně konfigurovatelná pomoví Gitlab CI/CD souboru v projektu (.gitlab-ci.yml)
● umožňuje automatizovat a zefektivnit proces vývoje software a udržovat vysokou kvalitu
kódu
● pomáhá snížit rizika a urychlit proces vývoje a nasazování aplikací.
● Navigace v projektu -> Menu projektu -> CI/CD -> Pipelines
10. Základní pojmy - Stages
10
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Reference : https://docs.gitlab.com/ee/ci/pipelines/
● slouží k oddělení jednotlivých fází v procesu sestavování, testování a nasazování.
● skládají se z několika Jobů (jeden nebo více)
● vykonávají se postupně
● vykonávají se v závislosti na výsledku předchozích Jobů
Example:
1. Build: Sestavování a kompilace kódu.
2. Test: Automatické testování kódu.
3. Deploy: Nasazení aplikace na produkční
prostředí.
11. Základní pojmy - Jobs
11
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Reference : https://docs.gitlab.com/ee/ci/jobs/
● jsou jednotlivé úlohy, které se vykonávají během pipeline
● každý Job se skládá z jedné nebo více úloh (příkazů, scriptů), které se vykonávají ve
specifickém pořadí (konfigurace .gitlab-ci.yml)
● Joby se pouštějí na virtuálním nebo fyzickém stroji (pouští je Gitlab Runner)
● Výsledky Jobů je možné sledovat v Gitlab GUI jako výpis z konzole
● Navigace v projektu -> Menu projektu -> CI/CD -> Jobs
○ nebo v konkrétním detailu Pipeline
12. Základní pojmy - Jobs
12
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Reference : https://docs.gitlab.com/ee/ci/jobs/
Nepovolená “klíčová slova” názvů Jobů
maximální počet znaků je 255
● image
● services
● stages
● types
● before_script
● after_script
● variables
● cache
● include
● true
● false
● nil
● pages:deploy configured for a deploy stage
Jak “schovat” Job aby se nepouštěl?
1. zakomentování jobu “#” :)
2. přidáním před název Jobu “tečku” ( . )
Výhody hidden jobů s “tečkou”
● mohu je znovu-použít v jakémkoliv jiném jobu
pomocí odkazování (Anchors) nebo rozšíření-extenzí
(Extends)
13. Configuration .yml
13
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Keyword Reference : https://docs.gitlab.com/ee/ci/yaml/
14. Optimization Configuration .yml
14
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Anchors & Odkazování https://docs.gitlab.com/ee/ci/yaml
/yaml_optimization.html
https://cs.wikipedia.org/wiki/YAML
15. Optimization Configuration .yml
15
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Rozšíření - Extends https://docs.gitlab.com/ee/ci/ya
ml/index.html#extends
https://docs.gitlab.com/ee/ci/yaml
/yaml_optimization.html
https://cs.wikipedia.org/wiki/YAML
16. Optimization Configuration .yml
16
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
https://docs.gitlab.com/ee/ci/yaml
/yaml_optimization.html
17. Optimization Configuration .yml
17
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
https://docs.gitlab.com/ee/ci/yaml
/yaml_optimization.html
18. Gitlab-ci.yml templates
18
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Private - Bootiq Fintech Templates :
https://gitlab.bootiq.io/jira-finn/tools/gitlab-ci
Public Gitlab Templates :
https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/gi
tlab/ci/templates
19. Configuration .yml - Include, templates
19
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
20. Variables (Group > Project > Environment > Job)
20
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Predefined Variables - “$CI_”
https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
21. Rules
21
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná esource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
● rules
● only
● except
rules:
- if: '$MANUAL'
when: manual
- if: '$REVIEW_DISABLED'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
when: never
- if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH'
● if: $VAR == “some value”
● if: $VAR != “some value”
● if: “some value” == $VAR
● Another especial cases:
○ if: $VAR == null # check if the $VAR is undefined
○ if: $VARIABLE # check if the $VAR exists
Expressions result as true if:
● If the content is found when using =~.
● Matches are not found when using !~.
● Example:
a. $VAR =~ /^string.*/
b. $VAR1 !~ /^string.*/
22. Trigger pipeline
22
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
23. Tips & tricks
23
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Existuje několik dobrých postupů pro vytváření souboru .gitlab-ci.yml v Gitlabu:
1. Používejte jednoduchou a čitelnou syntaxi: Gitlab CI/CD používá syntaxi YAML, takže se ujistěte, že Váš
soubor je jednoduchý a snadno čitelný.
2. Používejte cache pro rychlejší sestavování: Uložením a použitím cache můžete zrychlit sestavování a
ušetřit čas.
3. Snažte se o konsolidaci stejných úloh: Pokud se více úloh používá stejné nastavení, můžete je
konsolidovat do jedné úlohy, což snižuje složitost a zlepšuje čitelnost.
4. Používejte environment proměnné pro uchovávání citlivých informací: Místo přidávání citlivých informací
přímo do souboru .gitlab-ci.yml je můžete uchovávat v prostředích proměnných.
5. Používejte stage, když je to možné: Stages umožňují oddělit jednotlivé fáze sestavování, což umožňuje
jednodušší sledování a správu.
6. Pro psaní konfigurace (.gitlab-ci.yml) využívejte GUI Gitlabu. Má nástroje pro editaci, validaci,
vizualizaci a pohled reálného výsledku konfigurace. (Menu Projektu -> CI/CD -> Editor)
Tyto postupy jsou základem pro začátek, ale mohou se lišit v závislosti na specifických potřebách vašeho
projektu.
24. ThankYou
24
• Má zkušenost se řízením portfolia zakázek (projektů, agilních dodávek atd.)
• Dokáže nastavit reporting zakázek, který zejména ukazuje, jak performují
• Zná a dokáže využívat nástroje pro řízení portfolia
• Zná resource management a dokáže řídit zdroje v delivery organizaci
• Má zkušenost se řízením PMs, PMO, týmu SM nebo agilních koučů
• Zná projektové a agilní role a jejich rozdíly
• Dokáže rozvíjet klíčové role (projekty i agilita)
Díky za pozornost
Lukáš PAISKR
lukas.paiskr@gmail.com
https://github.com/keltuo
Disclaimer: Obsah byl převzat z dokumentace Gilatbu, Interní Dokumentace Bootiq,
Google Obrázky a při některých přesnějších popisků pomohl Chat GPT. :-)