Varijable u Gitlabu mogu se postaviti na nekoliko mjesta:
- U postavkama grupe
- U postavkama projekta
- Unutar .gitlab-ci.yml
U ovom slučaju, varijable u postavkama grupe i projekta mogu se postaviti kao "datoteka" ili "regularna varijabla" i označiti potvrdne okvire "zaštićeno" i "maska".
Počnimo s jednostavnim nasljeđivanjem koje će postupno postati složenije.
Konačni popis razina prioriteta nalazi se na kraju dokumenta.
Nasljeđivanje s grupama [izvori]
Varijable iz grupa se nasljeđuju, pri čemu vrijedi pravilo da što je grupa bliže projektu to je njena vrijednost važnija.
Grupe s varijablama
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
Rezultat cjevovoda
$ echo $MSG
B
Da varijabla nije navedena u skupini B, tada bismo vidjeli vrijednost A.
Nasljeđivanje varijabli unutar .gitlab-ci.yml [izvori]
Ovdje je sve vrlo jednostavno: varijablu možete postaviti globalno ili je možete prepisati unutar posla.
Grupe s varijablama
.gitlab-ci.yml
Kreirajmo sada 2 posla, u jednom od njih ćemo eksplicitno navesti $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 cjevovoda
- jeka:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- echo s vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Nasljeđivanje s grupama i unutar .gitlab-ci.yml [izvori]
Pokušajmo spojiti prethodna 2 primjera. Grupne varijable imaju prednost nad varijablama unutar .gitlab-ci.yml.
Grupe s varijablama
.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 cjevovoda
- jeka:
$ echo $MSG Y Job succeeded
- echo s vars:
$ echo $MSG Y Job succeeded
Nasljeđivanje s određivanjem varijabli u postavkama projekta [izvori]
Varijable u postavkama projekta UVIJEK imaju najveći prioritet! A varijable navedene unutar .gitlab-ci.yml ne igraju nikakvu ulogu.
Grupe s varijablama
Grupne varijable imaju niži prioritet.
.gitlab-ci.yml
Iskoristimo datoteku iz prethodnog primjera. Ovdje opet postoje varijable navedene unutar .gitlab-ci.yml, ali varijable unutar grupa i dalje imaju prednost nad njima.
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 cjevovoda
- jeka:
$ echo $MSG project-3 Job succeeded
- echo s vars:
$ echo $MSG project-3 Job succeeded
Nasljeđe s praznom vrijednošću [izvori]
Prazna vrijednost također je vrijednost
Prazna vrijednost nije Null
Grupe s varijablama
.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 cjevovoda
- jeka:
$ echo $MSG Job succeeded
- echo s vars:
$ echo $MSG Job succeeded
Nasljeđivanje s uključivanjem i grupama [izvori]
Ovdje ćemo pokušati uključiti projekt-2 u projekt-3
Grupe u ovom slučaju imaju prednost.
Grupe s varijablama
.gitlab-ci.yml
I postavite varijablu globalno u .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 cjevovoda
- jeka:
$ echo $MSG B Job succeeded
- echo s vars:
$ echo $MSG B Job succeeded
Nasljeđivanje s uključivanjem [izvori]
Ovdje ćemo pokušati uključiti projekt-2 u projekt-3.
Uz uvjet da: niti grupe niti sam projekt nemaju varijabli.
Grupe s varijablama
.gitlab-ci.yml
Isto kao u prethodnom primjeru
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 cjevovoda
- jeka:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- echo s vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Rezultati su sljedeći prioriteti:
- Varijable u postavkama projekta
- Varijable u skupinama
- Varijable strogo navedene unutar poslova (uključujući uključene datoteke)
- Globalne varijable unutar .gitlab-ci.yml
- Globalne varijable unutar uključenih datoteka
Zaključak
Najočitija točka je da pravilo "što je varijabla bliže kodu, to je važnija" prvo radi za grupe, a zatim isto pravilo za varijable unutar .gitlab-ci.yml, ali samo pod uvjetom da varijable u grupama nisu navedene .
Zatim, važno je shvatiti da je globalni prostor za glavni i uključeni .gitlab-ci.yml zajednički. I datoteka u kojoj se uključuje ima prioritet.
Izvor: www.habr.com