Premenné v Gitlab je možné nastaviť na niekoľkých miestach:
- V nastaveniach skupín
- V nastaveniach projektu
- V súbore .gitlab-ci.yml
Pri tom je možné nastaviť premenné v nastaveniach skupín a projektu ako „súbor“ alebo „bežnú premennú“ a zaškrtnúť možnosti „chránené“ a „maskovať“.

Začneme s jednoduchým dedičstvom a postupne to skomplikujeme.
S konečným zoznamom úrovní priorít sa môžete oboznámiť na konci dokumentu.
Dedičstvo so skupinami [zdrojové súbory]
Premenné zo skupín sa dedičia s pravidlom, že čím bližšie je skupina umiestnená k projektu, tým je jej hodnota dôležitejšia.
Skupiny s premennými

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSGVýsledok pipeline
$ echo $MSG
BAk by premenná nebola uvedená v skupine B, videli by sme hodnotu A.
Dedičstvo premenných v .gitlab-ci.yml [zdrojové súbory]
Tu je to celkom jednoduché: môžete nastaviť globálnu premennú, alebo ju môžete prepísať v rámci jobu.
Skupiny s premennými

.gitlab-ci.yml
Teraz vytvoríme 2 joby, v jednom z nich výslovne uvedieme $MSG.
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Vlastné v globálnom .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo s premennou:
stage: test
variables:
MSG: "Vlastné v jobe .gitlab-ci.yml"
script:
- echo $MSGVýsledok pipeline
- echo:
$ echo $MSG Vlastné v globálnom .gitlab-ci.yml Job úspešne dokončený - echo s premennými:
$ echo $MSG Vlastné v jobe .gitlab-ci.yml Job úspešne dokončený
Dedičstvo so skupinami a vo vnútri .gitlab-ci.yml [zdrojové súbory]
Skúsime spojiť predchádzajúce 2 príklady. Premenné skupín majú prednosť pred premennými vo vnútri .gitlab-ci.yml.
Skupiny s premennými

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Vlastné v globálnom .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo s premennou:
stage: test
variables:
MSG: "Vlastné v jobe .gitlab-ci.yml"
script:
- echo $MSGVýsledok pipeline
- echo:
$ echo $MSG Y Job úspešne dokončený - echo s premennými:
$ echo $MSG Y Job úspešne dokončený
Dedičstvo s uvedením premenných v nastaveniach projektu [zdrojové súbory]
Premenné v nastaveniach projektu majú VŽDY najvyššiu prioritu! A premenné uvedené vo vnútri .gitlab-ci.yml nehráva žiadnu úlohu.
Skupiny s premennými
Premenné skupín majú menšiu prioritu.

.gitlab-ci.yml
Využijeme súbor z predchádzajúceho príkladu. Tu opäť existujú premenné uvedené vo vnútri .gitlab-ci.yml, ale premenné v skupinách majú pred nimi prednosť.
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Vlastné v globálnom .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo s premennou:
stage: test
variables:
MSG: "Vlastné v jobe .gitlab-ci.yml"
script:
- echo $MSGVýsledok pipeline
- echo:
$ echo $MSG project-3 Job úspešne dokončený - echo s premennými:
$ echo $MSG project-3 Job úspešne dokončený
Dedičstvo s prázdnou hodnotou [zdrojové súbory]
Prázdna hodnota – to je tiež hodnota
Prázdna hodnota – to nie je Null
Skupiny s premennými

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Vlastné v globálnom .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo s premennou:
stage: test
variables:
MSG: "Vlastné v jobe .gitlab-ci.yml"
script:
- echo $MSGVýsledok pipeline
- echo:
$ echo $MSG Job úspešne dokončený - echo s premennými:
$ echo $MSG Job úspešne dokončený
Dedičstvo s inlúdom a skupinami [zdrojové súbory]
Tu sa pokúsime v project-2 zahrnúť project-3
Skupiny v tomto prípade majú prednosť.
Skupiny s premennými

.gitlab-ci.yml
A nastavíme premennú globálne v .gitlab-ci.yml
variables:
MSG: "S inlúdom .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'Výsledok pipeline
- echo:
$ echo $MSG B Job úspešne dokončený - echo s premennými:
$ echo $MSG B Job úspešne dokončený
Dedičstvo s inlúdom [zdrojové súbory]
Tu sa pokúsime v project-2 zahrnúť project-3.
Za predpokladu, že ani skupina, ani samotný projekt nemajú žiadne premenné.
Skupiny s premennými

.gitlab-ci.yml
Rovnako ako v predchádzajúcom príklade
variables:
MSG: "S inlúdom .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'Výsledok pipeline
- echo:
$ echo $MSG S obsahom .gitlab-ci.yml Práca bola úspešná - echo s premennými:
$ echo $MSG Vlastné v jobe .gitlab-ci.yml Job úspešne dokončený
Výsledkom sú nasledujúce priority:
- Premenné v nastaveniach projektu
- Premenné v skupinách
- Premenné presne uvedené v rámci úlohy (vrátane zaincludovaných súborov)
- Globálne premenné v .gitlab-ci.yml
- Globálne premenné v zaincludovaných súboroch
Záver
Najmenej zjavný aspekt spočíva v tom, že pravidlo „čím bližšie je premenná kódu, tým je dôležitejšia“ platí najskôr pre skupiny a potom rovnaké pravidlo pre premenné v .gitlab-ci.yml, ale len s podmienkou, že premenné v skupinách nie sú zadané.
Ďalším dôležitým miestom je pochopenie toho, že globálny priestor pre hlavné a zaincludované .gitlab-ci.yml je spoločný. A ten súbor, do ktorého prebieha include, má prioritu.
Zdroj: habr.com
