Hvordan Gitlab-CI arver miljøvariabler?

Variabler i GitLab kan angives flere steder:

  1. I gruppeindstillingerne
  2. I projektindstillingerne
  3. 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".

Hvordan Gitlab-CI arver miljøvariabler?

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

Hvordan Gitlab-CI arver miljøvariabler?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Pipeline-resultat

$ echo $MSG
B

Hvis 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

Hvordan Gitlab-CI arver miljø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 $MSG

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

Hvordan Gitlab-CI arver miljø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 $MSG

Pipeline-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.
Hvordan Gitlab-CI arver miljøvariabler?

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

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

Hvordan Gitlab-CI arver miljø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 $MSG

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

Hvordan Gitlab-CI arver miljø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

Hvordan Gitlab-CI arver miljø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:

  1. Variabler i projektindstillingerne
  2. Variabler i grupperne
  3. Variabler, der er specifikt angivet inden for jobbet (inklusive inkluderede filer)
  4. Globale variabler inden for .gitlab-ci.yml
  5. 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

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster