Proměnné v Gitlabu lze nastavit na několika místech:
- V nastavení skupin
- V nastavení projektu
- Uvnitř .gitlab-ci.yml
Přitom mohou být proměnné v nastavení skupin a projektu nastaveny jako 'soubor' nebo 'běžná proměnná' a zaškrtnuty možnosti 'chráněno' a 'maskovat'.

Začneme jednoduchým děděním a postupně to ztížíme.
Se seznámením s konečným seznamem prioritních úrovní se můžete seznámit na konci dokumentu.
Dědění se skupinami [zdroje]
Proměnné ze skupin se dědí s tím pravidlem, že čím blíže je skupina k projektu, tím je její hodnota důležitější.
Skupiny s proměnnými

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSGVýsledek pipeline
$ echo $MSG
BPokud by proměnná nebyla uvedena ve skupině B, viděli bychom hodnotu A.
Dědění proměnných uvnitř .gitlab-ci.yml [zdroje]
Zde je to docela jednoduché: lze nastavit globální proměnnou, nebo ji přepsat uvnitř úlohy.
Skupiny s proměnnými

.gitlab-ci.yml
Teď vytvoříme 2 úlohy, v jedné z nich jasně uvedeme $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 $MSGVýsledek pipeline
- echo:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded - echo with vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Dědění se skupinami a uvnitř .gitlab-ci.yml [zdroje]
Zkusíme zkombinovat předchozí 2 příklady. Proměnné skupin 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 $MSGVýsledek pipeline
- echo:
$ echo $MSG Y Job succeeded - echo with vars:
$ echo $MSG Y Job succeeded
Dědění s nastavení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
Proměnné skupin mají menší prioritu.

.gitlab-ci.yml
Využijeme soubor z předchozího příkladu. Zde opět existují proměnné uvedené uvnitř .gitlab-ci.yml, ale proměnné uvnitř skupin mají přesto před nimi prioritu.
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 $MSGVýsledek pipeline
- echo:
$ echo $MSG project-3 Job succeeded - echo with vars:
$ echo $MSG project-3 Job succeeded
Dědění s prázdnou hodnotou [zdroje]
Prázdná hodnota – to je také hodnota
Prázdná hodnota – to 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 $MSGVýsledek pipeline
- echo:
$ echo $MSG Job succeeded - echo with vars:
$ echo $MSG Job succeeded
Dědění s includem a skupinami [zdroje]
Zde se pokusíme v project-2 zahrnout project-3
Skupiny mají v tomto případě prioritu.
Skupiny s proměnnými

.gitlab-ci.yml
A nastavíme 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 pipeline
- echo:
$ echo $MSG B Job succeeded - echo with vars:
$ echo $MSG B Job succeeded
Dědění s includem [zdroje]
Zde se pokusíme v project-2 zařadit project-3.
Za podmínky, že: ani skupiny, ani samotný projekt 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 pipeline
- echo:
$ echo $MSG S include .gitlab-ci.yml Úkol uspěl - echo with vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Uskutečňují se následující priority:
- Proměnné v nastavení projektu
- Proměnné ve skupinách
- Proměnné přesně uvedené uvnitř úlohy (včetně zařazených souborů)
- Globální proměnné uvnitř .gitlab-ci.yml
- Globální proměnné uvnitř zařazených souborů
Závěr
Nejvíce nejasným bodem je, že pravidlo „čím blíže je proměnná kódům, tím je důležitější“ nejprve platí pro skupiny a pak stejné pravidlo pro proměnné uvnitř .gitlab-ci.yml, ale pouze za podmínky, že proměnné ve skupinách nejsou nastaveny.
Dalším důležitým bodem je pochopení toho, že globální prostor pro hlavní a zařazený .gitlab-ci.yml je společný. A ten soubor, do kterého dochází k zařazení, má prioritu.
Zdroj: habr.com
