Variabler i Gitlab kan settes flere steder:
- I gruppeinnstillinger
- I prosjektinnstillingene
- Inne i .gitlab-ci.yml
I dette tilfellet kan variabler i gruppe- og prosjektinnstillingene settes som "fil" eller "vanlig variabel" og kryss av for "beskyttet" og "maske".
La oss starte med enkel arv og det vil gradvis bli mer komplekst.
Den endelige listen over prioritetsnivåer finner du på slutten av dokumentet.
Arv med grupper [kilder]
Variabler fra grupper arves, med regelen om at jo nærmere gruppen er lokalisert prosjektet, desto viktigere er verdien.
Grupper med variabler
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
Rørledningsresultat
$ echo $MSG
B
Hvis variabelen ikke hadde blitt spesifisert i gruppe B, ville vi ha sett verdien A.
Arver variabler inne i .gitlab-ci.yml [kilder]
Alt er ganske enkelt her: du kan sette en variabel globalt, eller du kan overskrive den inne i jobben.
Grupper med variabler
.gitlab-ci.yml
La oss nå opprette 2 jobber, i en av dem vil vi eksplisitt indikere $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
Rørledningsresultat
- 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 inne i .gitlab-ci.yml [kilder]
La oss prøve å kombinere de to foregående eksemplene. Gruppevariabler har forrang over 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
Rørledningsresultat
- ekko:
$ echo $MSG Y Job succeeded
- ekko med vars:
$ echo $MSG Y Job succeeded
Arv med spesifisering av variabler i prosjektinnstillinger [kilder]
Variabler i prosjektinnstillinger har ALLTID høyeste prioritet! Og variablene spesifisert i .gitlab-ci.yml spiller ingen rolle.
Grupper med variabler
Gruppevariabler har lavere prioritet.
.gitlab-ci.yml
La oss bruke filen fra forrige eksempel. Også her er det variabler spesifisert i .gitlab-ci.yml, men variabler i grupper har fortsatt 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
Rørledningsresultat
- ekko:
$ echo $MSG project-3 Job succeeded
- ekko med vars:
$ echo $MSG project-3 Job succeeded
Arv med tom verdi [kilder]
En tom verdi er også en verdi
En tom verdi er ikke 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
Rørledningsresultat
- ekko:
$ echo $MSG Job succeeded
- ekko med vars:
$ echo $MSG Job succeeded
Arv med inkludere og grupper [kilder]
Her vil vi prøve å inkludere prosjekt-2 i prosjekt-3
Grupper i dette tilfellet har prioritet.
Grupper med variabler
.gitlab-ci.yml
Og sett variabelen 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'
Rørledningsresultat
- ekko:
$ echo $MSG B Job succeeded
- ekko med vars:
$ echo $MSG B Job succeeded
Arv med inkludere [kilder]
Her vil vi prøve å inkludere prosjekt-2 i prosjekt-3.
Med den forutsetning at: verken gruppene eller selve prosjektet har noen variabler.
Grupper med variabler
.gitlab-ci.yml
Samme som i forrige 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'
Rørledningsresultat
- ekko:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- ekko med vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Resultatene er som følger prioriteringer:
- Variabler i prosjektinnstillinger
- Variabler i grupper
- Variabler som er strengt spesifisert i jobber (inkludert inkluderte filer)
- Globale variabler i .gitlab-ci.yml
- Globale variabler i inkluderte filer
Konklusjon
Det mest ikke åpenbare poenget er at regelen "jo nærmere en variabel er koden, jo viktigere er den" fungerer først for grupper, og deretter den samme regelen for variabler inne i .gitlab-ci.yml, men bare under betingelsen at variablene i gruppene ikke er spesifisert .
Deretter er et viktig poeng å forstå at det globale rommet for de viktigste og inkluderte .gitlab-ci.yml er vanlig. Og filen der inkluderingen skjer har prioritet.
Kilde: www.habr.com