Variabler i Gitlab kan indstilles flere steder:
- I gruppeindstillinger
- I projektindstillingerne
- Inde i .gitlab-ci.yml
I dette tilfælde kan variabler i gruppe- og projektindstillingerne indstilles som "fil" eller "almindelig variabel", og marker afkrydsningsfelterne "beskyttet" og "maske".
Lad os starte med simpel arv, og det vil gradvist blive mere komplekst.
Den endelige liste over prioritetsniveauer kan findes i slutningen af dokumentet.
Arv med grupper [kilder]
Variabler fra grupper nedarves, med reglen om, at jo tættere gruppen er placeret på projektet, jo vigtigere er dens værdi.
Grupper med variable
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
Pipeline resultat
$ echo $MSG
B
Hvis variablen ikke var blevet specificeret i gruppe B, ville vi have set værdien A.
Nedarver variabler inde i .gitlab-ci.yml [kilder]
Alt er ret simpelt her: Du kan indstille en variabel globalt, eller du kan overskrive den inde i jobbet.
Grupper med variable
.gitlab-ci.yml
Lad os nu oprette 2 job, i et af dem vil vi udtrykkeligt angive $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
- ekko:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- ekko med vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Arv med grupper og inde i .gitlab-ci.yml [kilder]
Lad os prøve at kombinere de foregående 2 eksempler. Gruppevariable har forrang over variabler inde i .gitlab-ci.yml.
Grupper med variable
.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
- ekko:
$ echo $MSG Y Job succeeded
- ekko med vars:
$ echo $MSG Y Job succeeded
Nedarvning med angivelse af variabler i projektindstillinger [kilder]
Variabler i projektindstillinger har ALTID højeste prioritet! Og de variabler, der er angivet i .gitlab-ci.yml, spiller ingen rolle.
Grupper med variable
Gruppevariable har lavere prioritet.
.gitlab-ci.yml
Lad os bruge filen fra det forrige eksempel. Her er der igen variabler specificeret inde i .gitlab-ci.yml, men variabler inde i grupper har stadig forrang over 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
- ekko:
$ echo $MSG project-3 Job succeeded
- ekko med vars:
$ echo $MSG project-3 Job succeeded
Arv med tom værdi [kilder]
En tom værdi er også en værdi
En tom værdi er ikke Null
Grupper med variable
.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
- ekko:
$ echo $MSG Job succeeded
- ekko med vars:
$ echo $MSG Job succeeded
Arv med inkludere og grupper [kilder]
Her vil vi forsøge at inddrage projekt-2 i projekt-3
Grupper i dette tilfælde har prioritet.
Grupper med variable
.gitlab-ci.yml
Og sæt variablen 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
- ekko:
$ echo $MSG B Job succeeded
- ekko med vars:
$ echo $MSG B Job succeeded
Arv med inkl [kilder]
Her vil vi forsøge at inddrage projekt-2 i projekt-3.
Med den betingelse, at: hverken grupperne eller selve projektet har nogen variable.
Grupper med variable
.gitlab-ci.yml
Samme som i det foregående eksempel
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
- ekko:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- ekko med vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Resultaterne er som følger prioriteringer:
- Variabler i projektindstillinger
- Variabler i grupper
- Variabler strengt specificeret inde i job (inklusive inkluderede filer)
- Globale variabler inde i .gitlab-ci.yml
- Globale variabler inde i inkluderede filer
Konklusion
Det mest ikke åbenlyse punkt er, at reglen "jo tættere en variabel er på koden, jo vigtigere er den" fungerer først for grupper, og derefter den samme regel for variabler inde i .gitlab-ci.yml, men kun under betingelsen at variablerne i grupperne ikke er specificeret .
Dernæst er en vigtig pointe at forstå, at det globale rum for de vigtigste og inkluderede .gitlab-ci.yml er fælles. Og filen, hvori inkluderingen sker, har prioritet.
Kilde: www.habr.com