Variabler i GitLab kan angives flere steder:
- I gruppeindstillingerne
- I projektindstillingerne
- Inde i .gitlab-ci.yml
Her kan variabler i gruppe- og projektindstillinger angives som "fil" eller "almindelig variabel" og sættes til "beskyttet" og "maskere".

Lad os starte med simpel arv, som gradvist vil blive mere kompleks.
Du kan finde den endelige liste over prioriteringsniveauer i slutningen af dokumentet.
Arv med grupper [kilder]
Variabler fra grupper arves med den regel, at jo tættere gruppen er på projektet, desto vigtigere er dens værdi.
Grupper med variabler

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSGPipeline-resultat
$ echo $MSG
BHvis variablen ikke var angivet i gruppe B, ville vi have set værdien A.
Arv af variabler indenfor .gitlab-ci.yml [kilder]
Her er det ret simpelt: man kan angive en global variabel, eller man kan overskrive den indenfor jobbet.
Grupper med variabler

.gitlab-ci.yml
Lad os nu oprette 2 jobs, hvoraf en eksplicit angiver $MSG.
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo med var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSGPipeline-resultat
- echo:
$ echo $MSG Custom in global .gitlab-ci.yml Job blev fuldført - echo med vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job blev fuldført
Arv med grupper og indenfor .gitlab-ci.yml [kilder]
Vi vil prøve at kombinere de tidligere 2 eksempler. Gruppevariabler har højere prioritet end variabler indenfor .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 med var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSGPipeline-resultat
- echo:
$ echo $MSG Y Job blev fuldført - echo med vars:
$ echo $MSG Y Job blev fuldført
Arv med angivelse af variabler i projektindstillingerne [kilder]
Variabler i projektindstillingerne har ALDRIG lavere prioritet! Og variabler angivet indenfor .gitlab-ci.yml spiller ingen rolle.
Grupper med variabler
Gruppes variabler har en lavere prioritet.

.gitlab-ci.yml
Vi vil bruge filen fra det tidligere eksempel. Her er der igen variabler angivet indenfor .gitlab-ci.yml, men variabler indenfor grupper har stadig prioritet over dem.
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Custom in global .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo med var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSGPipeline-resultat
- echo:
$ echo $MSG project-3 Job blev fuldført - echo med vars:
$ echo $MSG project-3 Job blev fuldført
Arv med tom værdi [kilder]
Tom værdi er også en værdi
Tom værdi 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 med var:
stage: test
variables:
MSG: "Custom in job .gitlab-ci.yml"
script:
- echo $MSGPipeline-resultat
- echo:
$ echo $MSG Job blev fuldført - echo med vars:
$ echo $MSG Job blev fuldført
Arv med include og grupper [kilder]
Her vil vi prøve at inkludere project-3 i project-2
Grupperne har i dette tilfælde prioritet.
Grupper med variabler

.gitlab-ci.yml
Og vi angiver en global variabel 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
- echo:
$ echo $MSG B Job blev fuldført - echo med vars:
$ echo $MSG B Job blev fuldført
Arv med include [kilder]
Her vil vi prøve at inkludere project-3 i project-2.
Med betingelsen at hverken grupperne eller selve projektet har nogen variabler.
Grupper med variabler

.gitlab-ci.yml
Sådan som i det tidligere 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
- echo:
$ echo $MSG Med inklusion af .gitlab-ci.yml Jobbet lykkedes - echo med vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job blev fuldført
Der fremgår følgende prioriteter:
- Variabler i projektindstillingerne
- Variabler i grupperne
- Variabler, der er specifikt angivet inden for jobbet (inklusive inkluderede filer)
- Globale variabler inden for .gitlab-ci.yml
- Globale variabler inden for inkluderede filer
Konklusion
Det mest uforudsigelige punkt er, at reglen "jo tættere variablen er på koden, jo vigtigere er den" først gælder for grupper, og derefter gælder den samme regel for variabler inden for .gitlab-ci.yml, men kun med betingelse om, at variablerne i grupperne ikke er angivet.
Dernæst er det vigtigt at forstå, at det globale rum for den primære og inkluderede .gitlab-ci.yml er fælles. Og den fil, som inklusionen sker i, har prioritet.
Kilde: habr.com
