Variabelen in Gitlab kunnen op meerdere plaatsen worden ingesteld:
- In groepsinstellingen
- In projectinstellingen
- Binnen .gitlab-ci.yml
In groeps- en projectinstellingen kunnen variabelen worden ingesteld als 'bestand' of 'gewone variabele' en de vinkjes 'beschermd' en 'maskeren' kunnen worden aangevinkt.

Laten we beginnen met eenvoudige overerving en het zal geleidelijk moeilijker worden.
Je kunt de definitieve lijst met prioriteitsniveaus aan het einde van het document bekijken.
Overerving met groepen [bronnen]
Groepsvariabelen worden overgeƫrfd, met de regel dat hoe dichter de groep bij het project ligt, des te belangrijker de waarde is.
Groepen met variabelen

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSGPipeline-uitvoer
$ echo $MSG
BAls de variabele niet in groep B was opgegeven, dan zouden we waarde A hebben gezien.
Overerving van variabelen binnen .gitlab-ci.yml [bronnen]
Hier is alles vrij eenvoudig: je kunt een globale variabele instellen, of je kunt deze binnen de job overschrijven.
Groepen met variabelen

.gitlab-ci.yml
Laten we nu 2 jobs maken, waarbij we in een van hen expliciet $MSG opgeven.
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Aangepast in globale .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo met var:
stage: test
variables:
MSG: "Aangepast in job .gitlab-ci.yml"
script:
- echo $MSGPipeline-uitvoer
- echo:
$ echo $MSG Aangepast in globale .gitlab-ci.yml Job geslaagd - echo met variabelen:
$ echo $MSG Aangepast in job .gitlab-ci.yml Job geslaagd
Overerving met groepen en binnen .gitlab-ci.yml [bronnen]
Laten we proberen de voorgaande 2 voorbeelden samen te voegen. Groepsvariabelen hebben voorrang boven de variabelen binnen .gitlab-ci.yml.
Groepen met variabelen

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Aangepast in globale .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo met var:
stage: test
variables:
MSG: "Aangepast in job .gitlab-ci.yml"
script:
- echo $MSGPipeline-uitvoer
- echo:
$ echo $MSG Y Job geslaagd - echo met variabelen:
$ echo $MSG Y Job geslaagd
Overerving met vermelding van variabelen in projectinstellingen [bronnen]
Variabelen in projectinstellingen hebben ALTIJD de hoogste prioriteit! En de variabelen die binnen .gitlab-ci.yml zijn opgegeven, spelen geen enkele rol.
Groepen met variabelen
Groepsvariabelen hebben een lagere prioriteit.

.gitlab-ci.yml
Laten we het bestand uit het vorige voorbeeld gebruiken. Hier zijn weer variabelen opgegeven binnen .gitlab-ci.yml, maar groepsvariabelen hebben nog steeds voorrang.
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Aangepast in globale .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo met var:
stage: test
variables:
MSG: "Aangepast in job .gitlab-ci.yml"
script:
- echo $MSGPipeline-uitvoer
- echo:
$ echo $MSG project-3 Job geslaagd - echo met variabelen:
$ echo $MSG project-3 Job geslaagd
Overerving met een lege waarde [bronnen]
Een lege waarde is ook een waarde
Een lege waarde is niet Null
Groepen met variabelen

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Aangepast in globale .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo met var:
stage: test
variables:
MSG: "Aangepast in job .gitlab-ci.yml"
script:
- echo $MSGPipeline-uitvoer
- echo:
$ echo $MSG Job geslaagd - echo met variabelen:
$ echo $MSG Job geslaagd
Overerving met inclusies en groepen [bronnen]
Hier proberen we project-3 in project-2 op te nemen
Groepen hebben in dit geval voorrang.
Groepen met variabelen

.gitlab-ci.yml
En we stellen een variabele globaal in binnen .gitlab-ci.yml
variables:
MSG: "Met inclusief .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'Pipeline-uitvoer
- echo:
$ echo $MSG B Job geslaagd - echo met variabelen:
$ echo $MSG B Job geslaagd
Overerving met inclusies [bronnen]
Hier proberen we project-3 in project-2 op te nemen.
Op voorwaarde dat: noch de groep, noch het project zelf enige variabelen heeft.
Groepen met variabelen

.gitlab-ci.yml
Net als in het voorgaande voorbeeld
variables:
MSG: "Met inclusief .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'Pipeline-uitvoer
- echo:
$ echo $MSG Met include .gitlab-ci.yml Taak geslaagd - echo met variabelen:
$ echo $MSG Aangepast in job .gitlab-ci.yml Job geslaagd
Er komen de volgende uitkomsten prioriteiten:
- Variabelen in de projectinstellingen
- Variabelen in groepen
- Variabelen die strikt binnen de job zijn opgegeven (inclusief ingesloten bestanden)
- Globale variabelen binnen .gitlab-ci.yml
- Globale variabelen binnen ingesloten bestanden
Conclusie
Het meest onopvallende punt is dat de regel 'hoe dichter de variabele bij de code staat, des te belangrijker is deze' eerst geldt voor groepen, en vervolgens geldt dezelfde regel voor variabelen binnen .gitlab-ci.yml, maar alleen op voorwaarde dat de variabelen in groepen niet zijn gedefinieerd.
Verder is het belangrijke punt te begrijpen dat de globale ruimte voor de hoofd- en ingesloten .gitlab-ci.yml gemeenschappelijk is. En het bestand waarin de inclusie plaatsvindt heeft prioriteit.
Bron: habr.com
