Wie erbt Gitlab-CI Umgebungsvariablen?

Variablen in Gitlab können an mehreren Stellen festgelegt werden:

  1. In den Gruppeneinstellungen
  2. In den Projekteinstellungen
  3. 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.

Wie erbt Gitlab-CI Umgebungsvariablen?

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

Wie erbt Gitlab-CI Umgebungsvariablen?

.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 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

Wie erbt Gitlab-CI Umgebungsvariablen?

.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 $MSG

Pipeline-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

Wie erbt Gitlab-CI Umgebungsvariablen?

.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 $MSG

Pipeline-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.
Wie erbt Gitlab-CI Umgebungsvariablen?

.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 $MSG

Pipeline-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

Wie erbt Gitlab-CI Umgebungsvariablen?

.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 $MSG

Pipeline-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

Wie erbt Gitlab-CI Umgebungsvariablen?

.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

Wie erbt Gitlab-CI Umgebungsvariablen?

.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:

  1. Variablen in den Projekteinstellungen
  2. Variablen in Gruppen
  3. Variablen, die streng innerhalb des Jobs angegeben sind (einschließlich der eingebundenen Dateien)
  4. Globale Variablen innerhalb von .gitlab-ci.yml
  5. 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

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster