Hur ärver Gitlab-CI miljövariabler?

Variabler i Gitlab kan ställas in på flera ställen:

  1. I gruppinställningar
  2. I projektinställningarna
  3. Inuti .gitlab-ci.yml

I det här fallet kan variabler i grupp- och projektinställningarna ställas in som "fil" eller "vanlig variabel" och markera kryssrutorna "skyddad" och "mask".

Hur ärver Gitlab-CI miljövariabler?

Låt oss börja med enkelt arv och det kommer gradvis att bli mer komplext.

Den slutliga listan över prioritetsnivåer finns i slutet av dokumentet.

Arv med grupper [källor]

Variabler från grupper ärvs, med regeln att ju närmare gruppen befinner sig projektet, desto viktigare är dess värde.

Grupper med variabler

Hur ärver 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

Om variabeln inte hade specificerats i grupp B, skulle vi ha sett värdet A.

Ärver variabler inuti .gitlab-ci.yml [källor]

Allt är ganska enkelt här: du kan ställa in en variabel globalt, eller så kan du skriva över den i jobbet.

Grupper med variabler

Hur ärver Gitlab-CI miljövariabler?

.gitlab-ci.yml

Låt oss nu skapa 2 jobb, i ett av dem kommer vi uttryckligen att ange $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

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

Arv med grupper och inuti .gitlab-ci.yml [källor]

Låt oss försöka kombinera de två föregående exemplen. Gruppvariabler har företräde framför variabler i .gitlab-ci.yml.

Grupper med variabler

Hur ärver 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

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

Arv med angivande av variabler i projektinställningar [källor]

Variabler i projektinställningar har ALLTID högsta prioritet! Och variablerna som anges i .gitlab-ci.yml spelar ingen roll.

Grupper med variabler

Gruppvariabler har lägre prioritet.
Hur ärver Gitlab-CI miljövariabler?

.gitlab-ci.yml

Låt oss använda filen från föregående exempel. Även här finns variabler specificerade inuti .gitlab-ci.yml, men variabler i grupper har fortfarande företräde framför 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

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

Arv med tomt värde [källor]

Ett tomt värde är också ett värde
Ett tomt värde är inte Null

Grupper med variabler

Hur ärver 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

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

Arv med inkluderar och grupper [källor]

Här ska vi försöka få med projekt-2 i projekt-3
Grupper i detta fall har prioritet.

Grupper med variabler

Hur ärver Gitlab-CI miljövariabler?

.gitlab-ci.yml

Och ställ in variabeln 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

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

Arv med inkludera [källor]

Här ska vi försöka få med projekt-2 i projekt-3.
Med villkoret att: varken grupperna eller själva projektet har några variabler.

Grupper med variabler

Hur ärver Gitlab-CI miljövariabler?

.gitlab-ci.yml

Samma som i föregående exempel

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

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

Resultaten är följande prioriteringar:

  1. Variabler i projektinställningar
  2. Variabler i grupper
  3. Variabler strikt specificerade inuti jobb (inklusive inkluderade filer)
  4. Globala variabler inuti .gitlab-ci.yml
  5. Globala variabler inuti inkluderade filer

Slutsats

Den mest inte uppenbara punkten är att regeln "ju närmare en variabel är koden, desto viktigare är den" fungerar först för grupper, och sedan samma regel för variabler inuti .gitlab-ci.yml, men bara under villkoret att variablerna i grupperna inte är specificerade .
Därefter är en viktig punkt att förstå att det globala utrymmet för den huvudsakliga och inkluderade .gitlab-ci.yml är vanligt. Och filen där inkluderingen sker har prioritet.

Källa: will.com

Lägg en kommentar