Premenné v Gitlabe je možné nastaviť na niekoľkých miestach:
- V skupinových nastaveniach
- V nastaveniach projektu
- Vo vnútri .gitlab-ci.yml
V tomto prípade je možné premenné v nastaveniach skupiny a projektu nastaviť ako „súbor“ alebo „bežná premenná“ a začiarknuť políčka „chránené“ a „maska“.
Začnime jednoduchým dedením a postupne to bude zložitejšie.
Konečný zoznam úrovní priority nájdete na konci dokumentu.
Dedičnosť so skupinami [zdroje]
Premenné zo skupín sa dedia, pričom platí pravidlo, že čím bližšie je skupina 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 $MSG
Výsledok potrubia
$ echo $MSG
B
Ak by premenná nebola špecifikovaná v skupine B, potom by sme videli hodnotu A.
Dedenie premenných vnútri .gitlab-ci.yml [zdroje]
Všetko je tu celkom jednoduché: premennú môžete nastaviť globálne alebo ju môžete prepísať v úlohe.
Skupiny s premennými
.gitlab-ci.yml
Vytvorme teraz 2 pracovné miesta, v jednom z nich výslovne uvedieme $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ýsledok potrubia
- zahodil:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- echo s vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Dedičnosť so skupinami a vo vnútri .gitlab-ci.yml [zdroje]
Skúsme spojiť predchádzajúce 2 príklady. Skupinové premenné majú prednosť pred premennými vnútri .gitlab-ci.yml.
Skupiny s premenný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ýsledok potrubia
- zahodil:
$ echo $MSG Y Job succeeded
- echo s vars:
$ echo $MSG Y Job succeeded
Dedičnosť so špecifikovaním premenných v nastaveniach projektu [zdroje]
Premenné v nastaveniach projektu majú VŽDY najvyššiu prioritu! A premenné špecifikované v .gitlab-ci.yml nehrajú žiadnu rolu.
Skupiny s premennými
Skupinové premenné majú nižšiu prioritu.
.gitlab-ci.yml
Použime súbor z predchádzajúceho príkladu. Aj tu sú premenné špecifikované vo vnútri .gitlab-ci.yml, ale premenné vnútri skupín majú stále prednosť pred nimi.
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ýsledok potrubia
- zahodil:
$ echo $MSG project-3 Job succeeded
- echo s vars:
$ echo $MSG project-3 Job succeeded
Dedičnosť s prázdnou hodnotou [zdroje]
Prázdna hodnota je tiež hodnota
Prázdna hodnota nie je Null
Skupiny s premenný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ýsledok potrubia
- zahodil:
$ echo $MSG Job succeeded
- echo s vars:
$ echo $MSG Job succeeded
Dedičnosť so zahrnutím a skupinami [zdroje]
Tu sa pokúsime zahrnúť projekt-2 do projektu-3
Skupiny majú v tomto prípade prednosť.
Skupiny s premennými
.gitlab-ci.yml
A nastavte premennú globálne 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ýsledok potrubia
- zahodil:
$ echo $MSG B Job succeeded
- echo s vars:
$ echo $MSG B Job succeeded
Dedičnosť s zahrnutím [zdroje]
Tu sa pokúsime zahrnúť projekt-2 do projektu-3.
S podmienkou, že: skupiny ani samotný projekt nemajú žiadne premenné.
Skupiny s premennými
.gitlab-ci.yml
Rovnako ako v predchádzajúcom príklade
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ýsledok potrubia
- zahodil:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- echo s vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Výsledky sú nasledovné priority:
- Premenné v nastaveniach projektu
- Premenné v skupinách
- Premenné presne špecifikované v úlohách (vrátane zahrnutých súborov)
- Globálne premenné vnútri .gitlab-ci.yml
- Globálne premenné vo vnútri zahrnutých súborov
Záver
Najnezrejmejším bodom je, že pravidlo „čím bližšie je premenná ku kódu, tým je dôležitejšia“ funguje najskôr pre skupiny a potom rovnaké pravidlo pre premenné vnútri .gitlab-ci.yml, ale iba pod podmienkou že premenné v skupinách nie sú špecifikované .
Ďalej je dôležité pochopiť, že globálny priestor pre hlavnú a zahrnutú .gitlab-ci.yml je spoločný. A súbor, v ktorom sa zahrnutie vyskytuje, má prednosť.
Zdroj: hab.com