Varijable u Gitlabu mogu se postaviti na nekoliko mesta:
- U podešavanjima grupa
- U podešavanjima projekta
- Unutar .gitlab-ci.yml
Pri tome, varijable u podešavanjima grupa i projekta mogu se postaviti kao „fajl“ ili „obična varijabla“ i oznake „zaštićeno“ i „maskirati“ mogu se uključiti.

Počnimo sa jednostavnim nasleđivanjem i postepeno ćemo ga komplikovati.
Konačna lista nivoa prioriteta može se pregledati na kraju dokumenta.
Nasleđivanje kroz grupe [izvori]
Varijable iz grupa se nasleđuju, pod uslovom da što je grupa bliža projektu, njena vrednost je važnija.
Grupe sa varijablama

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSGRezultat pipeline-a
$ echo $MSG
BDa je varijabla bila neuvešena u grupi B, videli bismo vrednost A.
Nasleđivanje varijabli unutar .gitlab-ci.yml [izvori]
Ovdje je sve prilično jednostavno: varijablu se može postaviti globalno ili ju možemo prepisati unutar posla.
Grupe s varijablama

.gitlab-ci.yml
Sada ćemo kreirati 2 posla, u jednom od njih eksplicitno ćemo naznačiti $MSG.
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Prilagođeno u globalnom .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo sa var:
stage: test
variables:
MSG: "Prilagođeno u poslu .gitlab-ci.yml"
script:
- echo $MSGRezultat pipeline-a
- echo:
$ echo $MSG Prilagođeno u globalnom .gitlab-ci.yml Posao je uspešno završen - echo sa varijablama:
$ echo $MSG Prilagođeno u poslu .gitlab-ci.yml Posao je uspešno završen
Nasleđivanje kroz grupe i unutar .gitlab-ci.yml [izvori]
Pokušajmo da spojimo prethodna 2 primera. Varijable grupa imaju prioritet ispred varijabli unutar .gitlab-ci.yml.
Grupe s varijablama

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Prilagođeno u globalnom .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo sa var:
stage: test
variables:
MSG: "Prilagođeno u poslu .gitlab-ci.yml"
script:
- echo $MSGRezultat pipeline-a
- echo:
$ echo $MSG Y Posao je uspešno završen - echo sa varijablama:
$ echo $MSG Y Posao je uspešno završen
Nasleđivanje sa naznačenim varijablama u podešavanjima projekta [izvori]
Varijable u podešavanjima projekta UVEK imaju najviši prioritet! A varijable naznačene unutar .gitlab-ci.yml ne igraju nikakvu ulogu.
Grupe s varijablama
Varijable grupa imaju manji prioritet.

.gitlab-ci.yml
Koristićemo fajl iz prethodnog primera. Ovde opet postoje varijable naznačene unutar .gitlab-ci.yml, ali varijable unutar grupa imaju prioritet ispred njih.
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Prilagođeno u globalnom .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo sa var:
stage: test
variables:
MSG: "Prilagođeno u poslu .gitlab-ci.yml"
script:
- echo $MSGRezultat pipeline-a
- echo:
$ echo $MSG project-3 Posao je uspešno završen - echo sa varijablama:
$ echo $MSG project-3 Posao je uspešno završen
Nasleđivanje sa praznim vrednostima [izvori]
Prazna vrednost – to je takođe vrednost
Prazna vrednost – to nije Null
Grupe s varijablama

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Prilagođeno u globalnom .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo sa var:
stage: test
variables:
MSG: "Prilagođeno u poslu .gitlab-ci.yml"
script:
- echo $MSGRezultat pipeline-a
- echo:
$ echo $MSG Posao je uspešno završen - echo sa varijablama:
$ echo $MSG Posao je uspešno završen
Nasleđivanje sa uključivanjem i grupama [izvori]
Ovdje ćemo pokušati da uključimo project-3 u project-2
Grupe u ovom slučaju imaju prioritet.
Grupe s varijablama

.gitlab-ci.yml
I postavićemo varijablu globalno u .gitlab-ci.yml
variables:
MSG: "Sa uključivanjem .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'Rezultat pipeline-a
- echo:
$ echo $MSG B Posao je uspešno završen - echo sa varijablama:
$ echo $MSG B Posao je uspešno završen
Nasleđivanje sa uključivanjem [izvori]
Tukaj bomo poskusili vključiti project-3 v project-2.
Pod pogojem, da: niti skupine niti sam projekt nimata nobenih spremenljivk.
Grupe s varijablama

.gitlab-ci.yml
Enako kot v prejšnjem primeru
variables:
MSG: "Sa uključivanjem .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'Rezultat pipeline-a
- echo:
$ echo $MSG Z vključitvijo .gitlab-ci.yml Opravljeno - echo sa varijablama:
$ echo $MSG Prilagođeno u poslu .gitlab-ci.yml Posao je uspešno završen
Dobimo naslednje prioritete:
- Spremenljivke v nastavitvah projekta
- Spremenljivke v skupinah
- Spremenljivke, ki so jasno določene znotraj delovnega mesta (vključno z vključenimi datotekami)
- Globalne spremenljivke znotraj .gitlab-ci.yml
- Globalne spremenljivke znotraj vključenih datotek
Zaključek
Najmanj očitna točka je, da pravilo 'čim bližje je spremenljivka kodu, tem večja je njena pomembnost' velja najprej za skupine, nato pa enako pravilo tudi za spremenljivke znotraj .gitlab-ci.yml, toda samo pod pogojem, da spremenljivke v skupinah niso določene.
Nadalje je pomembno razumeti, da je globalni prostor za glavni in vključen .gitlab-ci.yml skupen. In tisti datoteki, v katero se vključuje, ima prednost.
Izvor: habr.com
