Variablen in Gitlab können an mehreren Stellen gesetzt werden:
- In Gruppeneinstellungen
- In den Projekteinstellungen
- Innerhalb von .gitlab-ci.yml
In diesem Fall können Variablen in den Gruppen- und Projekteinstellungen als „Datei“ oder „reguläre Variable“ festgelegt werden und die Kontrollkästchen „geschützt“ und „Maske“ aktiviert werden.
Beginnen wir mit der einfachen Vererbung und sie wird nach und nach komplexer.
Die endgültige Liste der Prioritätsstufen finden Sie am Ende des Dokuments.
Vererbung mit Gruppen [Quellen]
Variablen von Gruppen werden vererbt, wobei die Regel gilt, dass ihr Wert umso wichtiger ist, je näher die Gruppe am Projekt liegt.
Gruppen mit Variablen
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
Pipeline-Ergebnis
$ echo $MSG
B
Wenn die Variable nicht in Gruppe B angegeben worden wäre, hätten wir den Wert A gesehen.
Erben von Variablen in .gitlab-ci.yml [Quellen]
Hier ist alles ganz einfach: Sie können eine Variable global setzen oder sie innerhalb des Jobs überschreiben.
Gruppen mit Variablen
.gitlab-ci.yml
Lassen Sie uns nun zwei Jobs erstellen. In einem davon geben wir explizit $MSG an.
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-Ergebnis
- Echo:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- Echo mit Vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Vererbung mit Gruppen und innerhalb von .gitlab-ci.yml [Quellen]
Versuchen wir, die beiden vorherigen Beispiele zu kombinieren. Gruppenvariablen haben Vorrang vor Variablen in .gitlab-ci.yml.
Gruppen mit Variablen
.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-Ergebnis
- Echo:
$ echo $MSG Y Job succeeded
- Echo mit Vars:
$ echo $MSG Y Job succeeded
Vererbung mit Angabe von Variablen in den Projekteinstellungen [Quellen]
Variablen in Projekteinstellungen haben IMMER die höchste Priorität! Und die in .gitlab-ci.yml angegebenen Variablen spielen keine Rolle.
Gruppen mit Variablen
Gruppenvariablen haben eine niedrigere Priorität.
.gitlab-ci.yml
Verwenden wir die Datei aus dem vorherigen Beispiel. Auch hier sind Variablen in .gitlab-ci.yml angegeben, aber Variablen innerhalb von Gruppen haben immer noch Vorrang vor ihnen.
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-Ergebnis
- Echo:
$ echo $MSG project-3 Job succeeded
- Echo mit Vars:
$ echo $MSG project-3 Job succeeded
Vererbung mit leerem Wert [Quellen]
Auch ein leerer Wert ist ein Wert
Ein leerer Wert ist nicht Null
Gruppen mit Variablen
.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-Ergebnis
- Echo:
$ echo $MSG Job succeeded
- Echo mit Vars:
$ echo $MSG Job succeeded
Vererbung mit Include und Gruppen [Quellen]
Hier werden wir versuchen, Projekt-2 in Projekt-3 einzubinden
Gruppen haben in diesem Fall Vorrang.
Gruppen mit Variablen
.gitlab-ci.yml
Und legen Sie die Variable global in .gitlab-ci.yml fest
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-Ergebnis
- Echo:
$ echo $MSG B Job succeeded
- Echo mit Vars:
$ echo $MSG B Job succeeded
Vererbung mit include [Quellen]
Hier werden wir versuchen, Projekt-2 in Projekt-3 einzubinden.
Mit der Bedingung, dass weder die Gruppen noch das Projekt selbst Variablen haben.
Gruppen mit Variablen
.gitlab-ci.yml
Das Gleiche wie im vorherigen Beispiel
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-Ergebnis
- Echo:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- Echo mit Vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Die Ergebnisse sind wie folgt Prioritäten:
- Variablen in Projekteinstellungen
- Variablen in Gruppen
- Innerhalb von Jobs streng spezifizierte Variablen (einschließlich enthaltener Dateien)
- Globale Variablen in .gitlab-ci.yml
- Globale Variablen in eingebundenen Dateien
Abschluss
Der nicht offensichtlichste Punkt ist, dass die Regel „Je näher eine Variable am Code liegt, desto wichtiger ist sie“ zuerst für Gruppen und dann dieselbe Regel für Variablen in .gitlab-ci.yml gilt, jedoch nur unter der Bedingung dass die Variablen in den Gruppen nicht angegeben sind.
Als nächstes ist es wichtig zu verstehen, dass der globale Speicherplatz für die Hauptdatei und die enthaltene Datei .gitlab-ci.yml gemeinsam ist. Und die Datei, in der die Aufnahme erfolgt, hat Vorrang.
Source: habr.com