Spremenljivke v Gitlabu lahko nastavite na več mestih:
- V nastavitvah skupine
- V nastavitvah projekta
- Znotraj .gitlab-ci.yml
V tem primeru lahko spremenljivke v nastavitvah skupine in projekta nastavite kot »datoteka« ali »navadna spremenljivka« in označite potrditvena polja »zaščiteno« in »maska«.
Začnimo s preprostim dedovanjem, ki bo postopoma postalo bolj zapleteno.
Končni seznam prednostnih stopenj je na koncu dokumenta.
Dedovanje s skupinami [viri]
Spremenljivke iz skupin se dedujejo, pri čemer velja pravilo, da čim bližje se skupina nahaja projektu, tem pomembnejša je njena vrednost.
Skupine s spremenljivkami
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
Rezultat cevovoda
$ echo $MSG
B
Če spremenljivka ne bi bila navedena v skupini B, bi videli vrednost A.
Dedovanje spremenljivk znotraj .gitlab-ci.yml [viri]
Tukaj je vse precej preprosto: spremenljivko lahko nastavite globalno ali pa jo prepišete znotraj opravila.
Skupine s spremenljivkami
.gitlab-ci.yml
Ustvarimo zdaj 2 opravili, v enem od njih bomo izrecno navedli $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
Rezultat cevovoda
- odmev:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- odmev z vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Dedovanje s skupinami in znotraj .gitlab-ci.yml [viri]
Poskusimo združiti prejšnja 2 primera. Spremenljivke skupine imajo prednost pred spremenljivkami znotraj .gitlab-ci.yml.
Skupine s spremenljivkami
.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
Rezultat cevovoda
- odmev:
$ echo $MSG Y Job succeeded
- odmev z vars:
$ echo $MSG Y Job succeeded
Dedovanje s podajanjem spremenljivk v nastavitvah projekta [viri]
Spremenljivke v nastavitvah projekta imajo VEDNO najvišjo prioriteto! In spremenljivke, določene znotraj .gitlab-ci.yml, ne igrajo nobene vloge.
Skupine s spremenljivkami
Skupinske spremenljivke imajo nižjo prednost.
.gitlab-ci.yml
Uporabimo datoteko iz prejšnjega primera. Tudi tukaj so spremenljivke določene znotraj .gitlab-ci.yml, vendar imajo spremenljivke znotraj skupin še vedno prednost pred njimi.
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
Rezultat cevovoda
- odmev:
$ echo $MSG project-3 Job succeeded
- odmev z vars:
$ echo $MSG project-3 Job succeeded
Dedovanje s prazno vrednostjo [viri]
Prazna vrednost je tudi vrednost
Prazna vrednost ni Null
Skupine s spremenljivkami
.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
Rezultat cevovoda
- odmev:
$ echo $MSG Job succeeded
- odmev z vars:
$ echo $MSG Job succeeded
Dedovanje z vključitvijo in skupinami [viri]
Tukaj bomo poskušali projekt-2 vključiti v projekt-3
Skupine imajo v tem primeru prednost.
Skupine s spremenljivkami
.gitlab-ci.yml
In nastavite spremenljivko globalno 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'
Rezultat cevovoda
- odmev:
$ echo $MSG B Job succeeded
- odmev z vars:
$ echo $MSG B Job succeeded
Dedovanje z vključenim [viri]
Tukaj bomo poskušali projekt-2 vključiti v projekt-3.
Pod pogojem, da: niti skupine niti sam projekt nimata spremenljivk.
Skupine s spremenljivkami
.gitlab-ci.yml
Enako kot v prejšnjem primeru
variables:
MSG: "With include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'
Rezultat cevovoda
- odmev:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- odmev z vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Rezultati so naslednji prednostne naloge:
- Spremenljivke v nastavitvah projekta
- Spremenljivke v skupinah
- Spremenljivke, ki so strogo določene znotraj opravil (vključno z vključenimi datotekami)
- Globalne spremenljivke znotraj .gitlab-ci.yml
- Globalne spremenljivke znotraj vključenih datotek
Zaključek
Najbolj neočitna točka je, da pravilo »bližje kot je spremenljivka kodi, bolj je pomembna« najprej deluje za skupine, nato pa isto pravilo za spremenljivke znotraj .gitlab-ci.yml, vendar le pod pogojem da spremenljivke v skupinah niso podane .
Nato je pomembno razumeti, da je globalni prostor za glavni in vključeni .gitlab-ci.yml skupen. Datoteka, v kateri pride do vključitve, ima prednost.
Vir: www.habr.com