Proměnné v Gitlabu lze nastavit na několika místech:
- V nastavení skupiny
- V nastavení projektu
- Uvnitř .gitlab-ci.yml
V tomto případě lze proměnné v nastavení skupiny a projektu nastavit jako „soubor“ nebo „běžná proměnná“ a zaškrtnout políčka „chráněno“ a „maska“.
Začněme jednoduchým děděním a postupně to bude složitější.
Konečný seznam úrovní priority naleznete na konci dokumentu.
Dědičnost se skupinami [Zdroje]
Proměnné ze skupin se dědí, přičemž platí, že čím blíže se skupina nachází k projektu, tím důležitější je její hodnota.
Skupiny s proměnnými
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
Výsledek potrubí
$ echo $MSG
B
Pokud by proměnná nebyla specifikována ve skupině B, pak bychom viděli hodnotu A.
Dědění proměnných uvnitř .gitlab-ci.yml [Zdroje]
Zde je vše docela jednoduché: proměnnou můžete nastavit globálně, nebo ji můžete přepsat uvnitř úlohy.
Skupiny s proměnnými
.gitlab-ci.yml
Vytvořme nyní 2 úlohy, v jedné z nich výslovně označíme $MSG.
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo with var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSG
Výsledek potrubí
- vyhodil:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- echo s vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Dědičnost se skupinami a uvnitř .gitlab-ci.yml [Zdroje]
Zkusme spojit předchozí 2 příklady. Skupinové proměnné mají přednost před proměnnými uvnitř .gitlab-ci.yml.
Skupiny s proměnnými
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo with var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSG
Výsledek potrubí
- vyhodil:
$ echo $MSG Y Job succeeded
- echo s vars:
$ echo $MSG Y Job succeeded
Dědičnost se zadáním proměnných v nastavení projektu [Zdroje]
Proměnné v nastavení projektu mají VŽDY nejvyšší prioritu! A proměnné uvedené uvnitř .gitlab-ci.yml nehrají žádnou roli.
Skupiny s proměnnými
Skupinové proměnné mají nižší prioritu.
.gitlab-ci.yml
Použijme soubor z předchozího příkladu. Zde jsou opět proměnné specifikované uvnitř .gitlab-ci.yml, ale proměnné uvnitř skupin před nimi mají stále přednost.
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo with var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSG
Výsledek potrubí
- vyhodil:
$ echo $MSG project-3 Job succeeded
- echo s vars:
$ echo $MSG project-3 Job succeeded
Dědičnost s prázdnou hodnotou [Zdroje]
Prázdná hodnota je také hodnota
Prázdná hodnota není Null
Skupiny s proměnnými
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo with var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSG
Výsledek potrubí
- vyhodil:
$ echo $MSG Job succeeded
- echo s vars:
$ echo $MSG Job succeeded
Dědičnost s include a skupinami [Zdroje]
Zde se pokusíme zahrnout projekt-2 do projektu-3
Skupiny mají v tomto případě přednost.
Skupiny s proměnnými
.gitlab-ci.yml
A nastavte proměnnou globálně v .gitlab-ci.yml
variables:
MSG: "With include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'
Výsledek potrubí
- vyhodil:
$ echo $MSG B Job succeeded
- echo s vars:
$ echo $MSG B Job succeeded
Dědičnost s zahrnutím [Zdroje]
Zde se pokusíme zahrnout projekt-2 do projektu-3.
S podmínkou, že: skupiny ani projekt samotný nemají žádné proměnné.
Skupiny s proměnnými
.gitlab-ci.yml
Stejné jako v předchozím příkladu
variables:
MSG: "With include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'
Výsledek potrubí
- vyhodil:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- echo s vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Výsledky jsou následující priority:
- Proměnné v nastavení projektu
- Proměnné ve skupinách
- Proměnné přesně specifikované uvnitř úloh (včetně zahrnutých souborů)
- Globální proměnné uvnitř .gitlab-ci.yml
- Globální proměnné uvnitř zahrnutých souborů
Závěr
Nejméně zřejmým bodem je, že pravidlo „čím blíže je proměnná ke kódu, tím je důležitější“ funguje nejprve pro skupiny a poté stejné pravidlo pro proměnné uvnitř .gitlab-ci.yml, ale pouze za podmínky že proměnné ve skupinách nejsou specifikovány .
Dále je důležité pochopit, že globální prostor pro hlavní a zahrnutý .gitlab-ci.yml je společný. A soubor, ve kterém k zahrnutí dochází, má přednost.
Zdroj: www.habr.com