Hvordan arver Gitlab-CI miljøvariabler?

Variabler i Gitlab kan indstilles flere steder:

  1. I gruppeindstillinger
  2. I projektindstillingerne
  3. Inde i .gitlab-ci.yml

I dette tilfælde kan variabler i gruppe- og projektindstillingerne indstilles som "fil" eller "almindelig variabel", og marker afkrydsningsfelterne "beskyttet" og "maske".

Hvordan arver Gitlab-CI miljøvariabler?

Lad os starte med simpel arv, og det vil gradvist blive mere komplekst.

Den endelige liste over prioritetsniveauer kan findes i slutningen af ​​dokumentet.

Arv med grupper [kilder]

Variabler fra grupper nedarves, med reglen om, at jo tættere gruppen er placeret på projektet, jo vigtigere er dens værdi.

Grupper med variable

Hvordan arver Gitlab-CI 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 blevet specificeret i gruppe B, ville vi have set værdien A.

Nedarver variabler inde i .gitlab-ci.yml [kilder]

Alt er ret simpelt her: Du kan indstille en variabel globalt, eller du kan overskrive den inde i jobbet.

Grupper med variable

Hvordan arver Gitlab-CI miljøvariabler?

.gitlab-ci.yml

Lad os nu oprette 2 job, i et af dem vil vi udtrykkeligt angive $MSG.

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 resultat

  • ekko:
    $ echo $MSG
    Custom in global .gitlab-ci.yml
    Job succeeded
  • ekko med vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Arv med grupper og inde i .gitlab-ci.yml [kilder]

Lad os prøve at kombinere de foregående 2 eksempler. Gruppevariable har forrang over variabler inde i .gitlab-ci.yml.

Grupper med variable

Hvordan arver Gitlab-CI 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 with var:
  stage: test
  variables:
    MSG: "Custom in job .gitlab-ci.yml"
  script:
    - echo $MSG

Pipeline resultat

  • ekko:
    $ echo $MSG
    Y
    Job succeeded
  • ekko med vars:
    $ echo $MSG
    Y
    Job succeeded

Nedarvning med angivelse af variabler i projektindstillinger [kilder]

Variabler i projektindstillinger har ALTID højeste prioritet! Og de variabler, der er angivet i .gitlab-ci.yml, spiller ingen rolle.

Grupper med variable

Gruppevariable har lavere prioritet.
Hvordan arver Gitlab-CI miljøvariabler?

.gitlab-ci.yml

Lad os bruge filen fra det forrige eksempel. Her er der igen variabler specificeret inde i .gitlab-ci.yml, men variabler inde i grupper har stadig forrang over dem.

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 resultat

  • ekko:
    $ echo $MSG
    project-3
    Job succeeded
  • ekko med vars:
    $ echo $MSG
    project-3
    Job succeeded

Arv med tom værdi [kilder]

En tom værdi er også en værdi
En tom værdi er ikke Null

Grupper med variable

Hvordan arver Gitlab-CI 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 with var:
  stage: test
  variables:
    MSG: "Custom in job .gitlab-ci.yml"
  script:
    - echo $MSG

Pipeline resultat

  • ekko:
    $ echo $MSG
    Job succeeded
  • ekko med vars:
    $ echo $MSG
    Job succeeded

Arv med inkludere og grupper [kilder]

Her vil vi forsøge at inddrage projekt-2 i projekt-3
Grupper i dette tilfælde har prioritet.

Grupper med variable

Hvordan arver Gitlab-CI miljøvariabler?

.gitlab-ci.yml

Og sæt variablen globalt 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

  • ekko:
    $ echo $MSG
    B
    Job succeeded
  • ekko med vars:
    $ echo $MSG
    B
    Job succeeded

Arv med inkl [kilder]

Her vil vi forsøge at inddrage projekt-2 i projekt-3.
Med den betingelse, at: hverken grupperne eller selve projektet har nogen variable.

Grupper med variable

Hvordan arver Gitlab-CI miljøvariabler?

.gitlab-ci.yml

Samme som i det foregående 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

  • ekko:
    $ echo $MSG
    With include .gitlab-ci.yml
    Job succeeded
  • ekko med vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Resultaterne er som følger prioriteringer:

  1. Variabler i projektindstillinger
  2. Variabler i grupper
  3. Variabler strengt specificeret inde i job (inklusive inkluderede filer)
  4. Globale variabler inde i .gitlab-ci.yml
  5. Globale variabler inde i inkluderede filer

Konklusion

Det mest ikke åbenlyse punkt er, at reglen "jo tættere en variabel er på koden, jo vigtigere er den" fungerer først for grupper, og derefter den samme regel for variabler inde i .gitlab-ci.yml, men kun under betingelsen at variablerne i grupperne ikke er specificeret .
Dernæst er en vigtig pointe at forstå, at det globale rum for de vigtigste og inkluderede .gitlab-ci.yml er fælles. Og filen, hvori inkluderingen sker, har prioritet.

Kilde: www.habr.com

Tilføj en kommentar