Hvordan arver Gitlab-CI miljøvariabler?

Variabler i Gitlab kan settes flere steder:

  1. I gruppeinnstillinger
  2. I prosjektinnstillingene
  3. Inne i .gitlab-ci.yml

I dette tilfellet kan variabler i gruppe- og prosjektinnstillingene settes som "fil" eller "vanlig variabel" og kryss av for "beskyttet" og "maske".

Hvordan arver Gitlab-CI miljøvariabler?

La oss starte med enkel arv og det vil gradvis bli mer komplekst.

Den endelige listen over prioritetsnivåer finner du på slutten av dokumentet.

Arv med grupper [kilder]

Variabler fra grupper arves, med regelen om at jo nærmere gruppen er lokalisert prosjektet, desto viktigere er verdien.

Grupper med variabler

Hvordan arver Gitlab-CI miljøvariabler?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Rørledningsresultat

$ echo $MSG
B

Hvis variabelen ikke hadde blitt spesifisert i gruppe B, ville vi ha sett verdien A.

Arver variabler inne i .gitlab-ci.yml [kilder]

Alt er ganske enkelt her: du kan sette en variabel globalt, eller du kan overskrive den inne i jobben.

Grupper med variabler

Hvordan arver Gitlab-CI miljøvariabler?

.gitlab-ci.yml

La oss nå opprette 2 jobber, i en av dem vil vi eksplisitt indikere $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

Rørledningsresultat

  • 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 inne i .gitlab-ci.yml [kilder]

La oss prøve å kombinere de to foregående eksemplene. Gruppevariabler har forrang over variabler i .gitlab-ci.yml.

Grupper med variabler

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

Rørledningsresultat

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

Arv med spesifisering av variabler i prosjektinnstillinger [kilder]

Variabler i prosjektinnstillinger har ALLTID høyeste prioritet! Og variablene spesifisert i .gitlab-ci.yml spiller ingen rolle.

Grupper med variabler

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

.gitlab-ci.yml

La oss bruke filen fra forrige eksempel. Også her er det variabler spesifisert i .gitlab-ci.yml, men variabler i grupper har fortsatt 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

Rørledningsresultat

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

Arv med tom verdi [kilder]

En tom verdi er også en verdi
En tom verdi er ikke Null

Grupper med variabler

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

Rørledningsresultat

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

Arv med inkludere og grupper [kilder]

Her vil vi prøve å inkludere prosjekt-2 i prosjekt-3
Grupper i dette tilfellet har prioritet.

Grupper med variabler

Hvordan arver Gitlab-CI miljøvariabler?

.gitlab-ci.yml

Og sett variabelen 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'

Rørledningsresultat

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

Arv med inkludere [kilder]

Her vil vi prøve å inkludere prosjekt-2 i prosjekt-3.
Med den forutsetning at: verken gruppene eller selve prosjektet har noen variabler.

Grupper med variabler

Hvordan arver Gitlab-CI miljøvariabler?

.gitlab-ci.yml

Samme som i forrige 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'

Rørledningsresultat

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

Resultatene er som følger prioriteringer:

  1. Variabler i prosjektinnstillinger
  2. Variabler i grupper
  3. Variabler som er strengt spesifisert i jobber (inkludert inkluderte filer)
  4. Globale variabler i .gitlab-ci.yml
  5. Globale variabler i inkluderte filer

Konklusjon

Det mest ikke åpenbare poenget er at regelen "jo nærmere en variabel er koden, jo viktigere er den" fungerer først for grupper, og deretter den samme regelen for variabler inne i .gitlab-ci.yml, men bare under betingelsen at variablene i gruppene ikke er spesifisert .
Deretter er et viktig poeng å forstå at det globale rommet for de viktigste og inkluderte .gitlab-ci.yml er vanlig. Og filen der inkluderingen skjer har prioritet.

Kilde: www.habr.com

Legg til en kommentar