Gitlabi muutujaid saab määrata mitmes kohas:
- Grupi seadetes
- Projekti seadetes
- Sees on .gitlab-ci.yml
Sel juhul saab grupi- ja projektisätete muutujateks määrata faili või tavamuutuja ning märkida märkeruudud "kaitstud" ja "mask".
Alustame lihtsast pärimisest ja see muutub järk-järgult keerulisemaks.
Prioriteeditasemete lõpliku loetelu leiate dokumendi lõpust.
Pärimine rühmadega [allikad]
Rühmadest pärit muutujad on päritud, reegliga, et mida lähemal grupp projektile asub, seda olulisem on selle väärtus.
Muutujatega rühmad
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
Torujuhtme tulemus
$ echo $MSG
B
Kui muutujat poleks rühmas B määratud, oleksime näinud väärtust A.
Muutujate pärimine failis .gitlab-ci.yml [allikad]
Siin on kõik üsna lihtne: muutuja saab määrata globaalselt või töö sees üle kirjutada.
Muutujatega rühmad
.gitlab-ci.yml
Loome nüüd 2 töökohta, millest ühes märgime selgesõnaliselt $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
Torujuhtme tulemus
- kaja:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- kaja varsidega:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Pärand gruppidega ja .gitlab-ci.yml sees [allikad]
Proovime ühendada 2 eelmist näidet. Grupimuutujad on .gitlab-ci.yml-s olevate muutujate ees ülimuslikud.
Muutujatega rühmad
.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
Torujuhtme tulemus
- kaja:
$ echo $MSG Y Job succeeded
- kaja varsidega:
$ echo $MSG Y Job succeeded
Pärand koos määravate muutujatega projekti seadetes [allikad]
Muutujad projekti seadetes on ALATI kõrgeima prioriteediga! Ja failis .gitlab-ci.yml määratud muutujad ei mängi mingit rolli.
Muutujatega rühmad
Grupimuutujatel on madalam prioriteet.
.gitlab-ci.yml
Kasutame eelmise näite faili. Siin on jällegi failis .gitlab-ci.yml määratud muutujad, kuid rühmade sees olevad muutujad on nende suhtes siiski ülimuslikud.
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
Torujuhtme tulemus
- kaja:
$ echo $MSG project-3 Job succeeded
- kaja varsidega:
$ echo $MSG project-3 Job succeeded
Pärand tühja väärtusega [allikad]
Tühi väärtus on ka väärtus
Tühi väärtus ei ole Null
Muutujatega rühmad
.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
Torujuhtme tulemus
- kaja:
$ echo $MSG Job succeeded
- kaja varsidega:
$ echo $MSG Job succeeded
Pärand koos kaasamise ja rühmadega [allikad]
Siin proovime projekti-2 lisada projekti-3
Sel juhul on rühmadel eelisõigus.
Muutujatega rühmad
.gitlab-ci.yml
Ja määrake muutuja globaalselt failis .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'
Torujuhtme tulemus
- kaja:
$ echo $MSG B Job succeeded
- kaja varsidega:
$ echo $MSG B Job succeeded
Pärand koos kaasaga [allikad]
Siin proovime projekti-2 lisada projekti-3.
Tingimusega, et: ei rühmadel ega projektil endal pole muutujaid.
Muutujatega rühmad
.gitlab-ci.yml
Sama, mis eelmises näites
variables:
MSG: "With include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'
Torujuhtme tulemus
- kaja:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- kaja varsidega:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Tulemused on järgmised prioriteedid:
- Muutujad projekti seadetes
- Muutujad rühmades
- Tööde sees rangelt määratletud muutujad (sh kaasatud failid)
- Globaalsed muutujad failis .gitlab-ci.yml
- Globaalsed muutujad kaasatud failides
Järeldus
Kõige ebaselgem on see, et reegel "mida lähemal on muutuja koodile, seda olulisem see on" töötab kõigepealt rühmade puhul ja seejärel sama reegel failis .gitlab-ci.yml olevate muutujate puhul, kuid ainult tingimusel et rühmade muutujad ei ole määratud .
Järgmiseks on oluline mõista, et peamise ja kaasatud faili .gitlab-ci.yml globaalne ruum on tavaline. Ja failil, milles lisamine toimub, on prioriteet.
Allikas: www.habr.com