Variablen in Gitlab können an mehreren Stellen festgelegt werden:
- In den Gruppeneinstellungen
- In den Projekteinstellungen
- Innerhalb von .gitlab-ci.yml
Dabei können die Variablen in den Gruppen- und Projekteinstellungen als âDateiâ oder ânormale Variableâ festgelegt werden, und die Optionen âgeschĂŒtztâ und âmaskierenâ aktiviert werden.

Beginnen wir mit der einfachen Vererbung und werden zunehmend komplexer.
Die endgĂŒltige Liste der PrioritĂ€tsebenen kann am Ende des Dokuments eingesehen werden.
Vererbung mit Gruppen [Quellcodes]
Variablen aus Gruppen werden vererbt unter der Regel, dass je nÀher die Gruppe zum Projekt liegt, desto wichtiger ist ihr Wert.
Gruppen mit Variablen

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSGPipeline-Ergebnis
$ echo $MSG
BWenn die Variable nicht in Gruppe B angegeben wÀre, hÀtten wir den Wert A gesehen.
Vererbung von Variablen innerhalb von .gitlab-ci.yml [Quellcodes]
Hier ist alles ziemlich einfach: Sie können eine Variable global festlegen oder sie innerhalb des Jobs ĂŒberschreiben.
Gruppen mit Variablen

.gitlab-ci.yml
Lassen Sie uns jetzt 2 Jobs erstellen, in einem von ihnen geben wir $MSG ausdrĂŒcklich an.
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Benutzerdefiniert in globaler .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo mit var:
stage: test
variables:
MSG: "Benutzerdefiniert in job .gitlab-ci.yml"
script:
- echo $MSGPipeline-Ergebnis
- echo:
$ echo $MSG Benutzerdefiniert in globaler .gitlab-ci.yml Job erfolgreich - echo mit vars:
$ echo $MSG Benutzerdefiniert in job .gitlab-ci.yml Job erfolgreich
Vererbung mit Gruppen und innerhalb von .gitlab-ci.yml [Quellcodes]
Versuchen wir, die vorherigen 2 Beispiele zu kombinieren. Gruppenvariablen haben Vorrang vor Variablen innerhalb von .gitlab-ci.yml.
Gruppen mit Variablen

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Benutzerdefiniert in globaler .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo mit var:
stage: test
variables:
MSG: "Benutzerdefiniert in job .gitlab-ci.yml"
script:
- echo $MSGPipeline-Ergebnis
- echo:
$ echo $MSG Y Job erfolgreich - echo mit vars:
$ echo $MSG Y Job erfolgreich
Vererbung mit Angabe von Variablen in den Projekteinstellungen [Quellcodes]
Variablen in den Projekteinstellungen haben IMMER die höchste PrioritÀt! Und Variablen, die innerhalb von .gitlab-ci.yml angegeben sind, spielen keine Rolle.
Gruppen mit Variablen
Gruppenvariablen haben eine niedrigere PrioritÀt.

.gitlab-ci.yml
Nutzen wir die Datei aus dem vorherigen Beispiel. Hier gibt es wieder Variablen, die innerhalb von .gitlab-ci.yml angegeben sind, aber Gruppenvariablen haben trotzdem Vorrang.
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Benutzerdefiniert in globaler .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo mit var:
stage: test
variables:
MSG: "Benutzerdefiniert in job .gitlab-ci.yml"
script:
- echo $MSGPipeline-Ergebnis
- echo:
$ echo $MSG project-3 Job erfolgreich - echo mit vars:
$ echo $MSG project-3 Job erfolgreich
Vererbung mit leerem Wert [Quellcodes]
Ein leerer Wert ist ebenfalls ein Wert
Ein leerer Wert ist nicht Null
Gruppen mit Variablen

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
MSG: "Benutzerdefiniert in globaler .gitlab-ci.yml"
echo:
stage: test
script:
- echo $MSG
echo mit var:
stage: test
variables:
MSG: "Benutzerdefiniert in job .gitlab-ci.yml"
script:
- echo $MSGPipeline-Ergebnis
- echo:
$ echo $MSG Job erfolgreich - echo mit vars:
$ echo $MSG Job erfolgreich
Vererbung mit Include und Gruppen [Quellcodes]
Hier versuchen wir, project-3 in project-2 einzubinden
In diesem Fall haben Gruppen Vorrang.
Gruppen mit Variablen

.gitlab-ci.yml
Und wir setzen eine Variable global in .gitlab-ci.yml
variables:
MSG: "Mit Include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'Pipeline-Ergebnis
- echo:
$ echo $MSG B Job erfolgreich - echo mit vars:
$ echo $MSG B Job erfolgreich
Vererbung mit Include [Quellcodes]
Hier werden wir versuchen, project-3 in project-2 einzufĂŒgen.
Unter der Bedingung, dass weder die Gruppen noch das Projekt selbst Variablen haben.
Gruppen mit Variablen

.gitlab-ci.yml
So wie im vorherigen Beispiel.
variables:
MSG: "Mit Include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'Pipeline-Ergebnis
- echo:
$ echo $MSG Mit include .gitlab-ci.yml Job erfolgreich - echo mit vars:
$ echo $MSG Benutzerdefiniert in job .gitlab-ci.yml Job erfolgreich
Es ergeben sich die folgenden PrioritÀten:
- Variablen in den Projekteinstellungen
- Variablen in Gruppen
- Variablen, die streng innerhalb des Jobs angegeben sind (einschlieĂlich der eingebundenen Dateien)
- Globale Variablen innerhalb von .gitlab-ci.yml
- Globale Variablen innerhalb der eingebundenen Dateien
Fazit
Der vielleicht unauffĂ€lligste Punkt ist, dass die Regel âje nĂ€her die Variable am Code, desto wichtiger ist sieâ zunĂ€chst fĂŒr Gruppen gilt und dann dieselbe Regel fĂŒr die Variablen innerhalb von .gitlab-ci.yml, jedoch nur unter der Bedingung, dass keine Variablen in Gruppen gesetzt sind.
Ein weiteres wichtiges VerstĂ€ndnis ist, dass der globale Raum fĂŒr die Haupt- und die eingebundene .gitlab-ci.yml - gemeinsam ist. Die Datei, in die der Include erfolgt, hat Vorrang.
Quelle: habr.com
