Variabler i Gitlab kan ställas in på flera ställen:
- I gruppinställningar
- I projektinställningarna
- Inuti .gitlab-ci.yml
I det här fallet kan variabler i grupp- och projektinställningarna ställas in som "fil" eller "vanlig variabel" och markera kryssrutorna "skyddad" och "mask".
Låt oss börja med enkelt arv och det kommer gradvis att bli mer komplext.
Den slutliga listan över prioritetsnivåer finns i slutet av dokumentet.
Arv med grupper [källor]
Variabler från grupper ärvs, med regeln att ju närmare gruppen befinner sig projektet, desto viktigare är dess värde.
Grupper med variabler
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
Pipeline resultat
$ echo $MSG
B
Om variabeln inte hade specificerats i grupp B, skulle vi ha sett värdet A.
Ärver variabler inuti .gitlab-ci.yml [källor]
Allt är ganska enkelt här: du kan ställa in en variabel globalt, eller så kan du skriva över den i jobbet.
Grupper med variabler
.gitlab-ci.yml
Låt oss nu skapa 2 jobb, i ett av dem kommer vi uttryckligen att ange $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
Pipeline resultat
- eko:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- eko med vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Arv med grupper och inuti .gitlab-ci.yml [källor]
Låt oss försöka kombinera de två föregående exemplen. Gruppvariabler har företräde framför variabler i .gitlab-ci.yml.
Grupper med variabler
.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
Pipeline resultat
- eko:
$ echo $MSG Y Job succeeded
- eko med vars:
$ echo $MSG Y Job succeeded
Arv med angivande av variabler i projektinställningar [källor]
Variabler i projektinställningar har ALLTID högsta prioritet! Och variablerna som anges i .gitlab-ci.yml spelar ingen roll.
Grupper med variabler
Gruppvariabler har lägre prioritet.
.gitlab-ci.yml
Låt oss använda filen från föregående exempel. Även här finns variabler specificerade inuti .gitlab-ci.yml, men variabler i grupper har fortfarande företräde framför dem.
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
Pipeline resultat
- eko:
$ echo $MSG project-3 Job succeeded
- eko med vars:
$ echo $MSG project-3 Job succeeded
Arv med tomt värde [källor]
Ett tomt värde är också ett värde
Ett tomt värde är inte Null
Grupper med variabler
.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
Pipeline resultat
- eko:
$ echo $MSG Job succeeded
- eko med vars:
$ echo $MSG Job succeeded
Arv med inkluderar och grupper [källor]
Här ska vi försöka få med projekt-2 i projekt-3
Grupper i detta fall har prioritet.
Grupper med variabler
.gitlab-ci.yml
Och ställ in variabeln globalt i .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'
Pipeline resultat
- eko:
$ echo $MSG B Job succeeded
- eko med vars:
$ echo $MSG B Job succeeded
Arv med inkludera [källor]
Här ska vi försöka få med projekt-2 i projekt-3.
Med villkoret att: varken grupperna eller själva projektet har några variabler.
Grupper med variabler
.gitlab-ci.yml
Samma som i föregående exempel
variables:
MSG: "With include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'
Pipeline resultat
- eko:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- eko med vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Resultaten är följande prioriteringar:
- Variabler i projektinställningar
- Variabler i grupper
- Variabler strikt specificerade inuti jobb (inklusive inkluderade filer)
- Globala variabler inuti .gitlab-ci.yml
- Globala variabler inuti inkluderade filer
Slutsats
Den mest inte uppenbara punkten är att regeln "ju närmare en variabel är koden, desto viktigare är den" fungerar först för grupper, och sedan samma regel för variabler inuti .gitlab-ci.yml, men bara under villkoret att variablerna i grupperna inte är specificerade .
Därefter är en viktig punkt att förstå att det globala utrymmet för den huvudsakliga och inkluderade .gitlab-ci.yml är vanligt. Och filen där inkluderingen sker har prioritet.
Källa: will.com