Kuidas Gitlab-CI keskkonnamuutujaid pärib?

Gitlabi muutujaid saab määrata mitmes kohas:

  1. Grupi seadetes
  2. Projekti seadetes
  3. Sees on .gitlab-ci.yml

Sel juhul saab grupi- ja projektisätete muutujateks määrata faili või tavamuutuja ning märkida märkeruudud "kaitstud" ja "mask".

Kuidas Gitlab-CI keskkonnamuutujaid pärib?

Alustame lihtsast pärimisest ja see muutub järk-järgult keerulisemaks.

Prioriteeditasemete lõpliku loetelu leiate dokumendi lõpust.

Pärimine rühmadega [allikad]

Rühmadest pärit muutujad on päritud, reegliga, et mida lähemal grupp projektile asub, seda olulisem on selle väärtus.

Muutujatega rühmad

Kuidas Gitlab-CI keskkonnamuutujaid pärib?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Torujuhtme tulemus

$ echo $MSG
B

Kui muutujat poleks rühmas B määratud, oleksime näinud väärtust A.

Muutujate pärimine failis .gitlab-ci.yml [allikad]

Siin on kõik üsna lihtne: muutuja saab määrata globaalselt või töö sees üle kirjutada.

Muutujatega rühmad

Kuidas Gitlab-CI keskkonnamuutujaid pärib?

.gitlab-ci.yml

Loome nüüd 2 töökohta, millest ühes märgime selgesõnaliselt $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

Torujuhtme tulemus

  • kaja:
    $ echo $MSG
    Custom in global .gitlab-ci.yml
    Job succeeded
  • kaja varsidega:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Pärand gruppidega ja .gitlab-ci.yml sees [allikad]

Proovime ühendada 2 eelmist näidet. Grupimuutujad on .gitlab-ci.yml-s olevate muutujate ees ülimuslikud.

Muutujatega rühmad

Kuidas Gitlab-CI keskkonnamuutujaid pärib?

.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

Torujuhtme tulemus

  • kaja:
    $ echo $MSG
    Y
    Job succeeded
  • kaja varsidega:
    $ echo $MSG
    Y
    Job succeeded

Pärand koos määravate muutujatega projekti seadetes [allikad]

Muutujad projekti seadetes on ALATI kõrgeima prioriteediga! Ja failis .gitlab-ci.yml määratud muutujad ei mängi mingit rolli.

Muutujatega rühmad

Grupimuutujatel on madalam prioriteet.
Kuidas Gitlab-CI keskkonnamuutujaid pärib?

.gitlab-ci.yml

Kasutame eelmise näite faili. Siin on jällegi failis .gitlab-ci.yml määratud muutujad, kuid rühmade sees olevad muutujad on nende suhtes siiski ülimuslikud.

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

Torujuhtme tulemus

  • kaja:
    $ echo $MSG
    project-3
    Job succeeded
  • kaja varsidega:
    $ echo $MSG
    project-3
    Job succeeded

Pärand tühja väärtusega [allikad]

Tühi väärtus on ka väärtus
Tühi väärtus ei ole Null

Muutujatega rühmad

Kuidas Gitlab-CI keskkonnamuutujaid pärib?

.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

Torujuhtme tulemus

  • kaja:
    $ echo $MSG
    Job succeeded
  • kaja varsidega:
    $ echo $MSG
    Job succeeded

Pärand koos kaasamise ja rühmadega [allikad]

Siin proovime projekti-2 lisada projekti-3
Sel juhul on rühmadel eelisõigus.

Muutujatega rühmad

Kuidas Gitlab-CI keskkonnamuutujaid pärib?

.gitlab-ci.yml

Ja määrake muutuja globaalselt failis .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'

Torujuhtme tulemus

  • kaja:
    $ echo $MSG
    B
    Job succeeded
  • kaja varsidega:
    $ echo $MSG
    B
    Job succeeded

Pärand koos kaasaga [allikad]

Siin proovime projekti-2 lisada projekti-3.
Tingimusega, et: ei rühmadel ega projektil endal pole muutujaid.

Muutujatega rühmad

Kuidas Gitlab-CI keskkonnamuutujaid pärib?

.gitlab-ci.yml

Sama, mis eelmises näites

variables:
 MSG: "With  include  .gitlab-ci.yml"
include:
 - project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
   file: '.gitlab-ci.yml'

Torujuhtme tulemus

  • kaja:
    $ echo $MSG
    With include .gitlab-ci.yml
    Job succeeded
  • kaja varsidega:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Tulemused on järgmised prioriteedid:

  1. Muutujad projekti seadetes
  2. Muutujad rühmades
  3. Tööde sees rangelt määratletud muutujad (sh kaasatud failid)
  4. Globaalsed muutujad failis .gitlab-ci.yml
  5. Globaalsed muutujad kaasatud failides

Järeldus

Kõige ebaselgem on see, et reegel "mida lähemal on muutuja koodile, seda olulisem see on" töötab kõigepealt rühmade puhul ja seejärel sama reegel failis .gitlab-ci.yml olevate muutujate puhul, kuid ainult tingimusel et rühmade muutujad ei ole määratud .
Järgmiseks on oluline mõista, et peamise ja kaasatud faili .gitlab-ci.yml globaalne ruum on tavaline. Ja failil, milles lisamine toimub, on prioriteet.

Allikas: www.habr.com

Lisa kommentaar