Ako Gitlab-CI dedí premenné prostredia?

Premenné v Gitlabe je možné nastaviť na niekoľkých miestach:

  1. V skupinových nastaveniach
  2. V nastaveniach projektu
  3. Vo vnútri .gitlab-ci.yml

V tomto prípade je možné premenné v nastaveniach skupiny a projektu nastaviť ako „súbor“ alebo „bežná premenná“ a začiarknuť políčka „chránené“ a „maska“.

Ako Gitlab-CI dedí premenné prostredia?

Začnime jednoduchým dedením a postupne to bude zložitejšie.

Konečný zoznam úrovní priority nájdete na konci dokumentu.

Dedičnosť so skupinami [zdroje]

Premenné zo skupín sa dedia, pričom platí pravidlo, že čím bližšie je skupina k projektu, tým je jej hodnota dôležitejšia.

Skupiny s premennými

Ako Gitlab-CI dedí premenné prostredia?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Výsledok potrubia

$ echo $MSG
B

Ak by premenná nebola špecifikovaná v skupine B, potom by sme videli hodnotu A.

Dedenie premenných vnútri .gitlab-ci.yml [zdroje]

Všetko je tu celkom jednoduché: premennú môžete nastaviť globálne alebo ju môžete prepísať v úlohe.

Skupiny s premennými

Ako Gitlab-CI dedí premenné prostredia?

.gitlab-ci.yml

Vytvorme teraz 2 pracovné miesta, v jednom z nich výslovne uvedieme $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

Výsledok potrubia

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

Dedičnosť so skupinami a vo vnútri .gitlab-ci.yml [zdroje]

Skúsme spojiť predchádzajúce 2 príklady. Skupinové premenné majú prednosť pred premennými vnútri .gitlab-ci.yml.

Skupiny s premennými

Ako Gitlab-CI dedí premenné prostredia?

.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

Výsledok potrubia

  • zahodil:
    $ echo $MSG
    Y
    Job succeeded
  • echo s vars:
    $ echo $MSG
    Y
    Job succeeded

Dedičnosť so špecifikovaním premenných v nastaveniach projektu [zdroje]

Premenné v nastaveniach projektu majú VŽDY najvyššiu prioritu! A premenné špecifikované v .gitlab-ci.yml nehrajú žiadnu rolu.

Skupiny s premennými

Skupinové premenné majú nižšiu prioritu.
Ako Gitlab-CI dedí premenné prostredia?

.gitlab-ci.yml

Použime súbor z predchádzajúceho príkladu. Aj tu sú premenné špecifikované vo vnútri .gitlab-ci.yml, ale premenné vnútri skupín majú stále prednosť pred nimi.

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

Výsledok potrubia

  • zahodil:
    $ echo $MSG
    project-3
    Job succeeded
  • echo s vars:
    $ echo $MSG
    project-3
    Job succeeded

Dedičnosť s prázdnou hodnotou [zdroje]

Prázdna hodnota je tiež hodnota
Prázdna hodnota nie je Null

Skupiny s premennými

Ako Gitlab-CI dedí premenné prostredia?

.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

Výsledok potrubia

  • zahodil:
    $ echo $MSG
    Job succeeded
  • echo s vars:
    $ echo $MSG
    Job succeeded

Dedičnosť so zahrnutím a skupinami [zdroje]

Tu sa pokúsime zahrnúť projekt-2 do projektu-3
Skupiny majú v tomto prípade prednosť.

Skupiny s premennými

Ako Gitlab-CI dedí premenné prostredia?

.gitlab-ci.yml

A nastavte premennú globálne v .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'

Výsledok potrubia

  • zahodil:
    $ echo $MSG
    B
    Job succeeded
  • echo s vars:
    $ echo $MSG
    B
    Job succeeded

Dedičnosť s zahrnutím [zdroje]

Tu sa pokúsime zahrnúť projekt-2 do projektu-3.
S podmienkou, že: skupiny ani samotný projekt nemajú žiadne premenné.

Skupiny s premennými

Ako Gitlab-CI dedí premenné prostredia?

.gitlab-ci.yml

Rovnako ako v predchádzajúcom príklade

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

Výsledok potrubia

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

Výsledky sú nasledovné priority:

  1. Premenné v nastaveniach projektu
  2. Premenné v skupinách
  3. Premenné presne špecifikované v úlohách (vrátane zahrnutých súborov)
  4. Globálne premenné vnútri .gitlab-ci.yml
  5. Globálne premenné vo vnútri zahrnutých súborov

Záver

Najnezrejmejším bodom je, že pravidlo „čím bližšie je premenná ku kódu, tým je dôležitejšia“ funguje najskôr pre skupiny a potom rovnaké pravidlo pre premenné vnútri .gitlab-ci.yml, ale iba pod podmienkou že premenné v skupinách nie sú špecifikované .
Ďalej je dôležité pochopiť, že globálny priestor pre hlavnú a zahrnutú .gitlab-ci.yml je spoločný. A súbor, v ktorom sa zahrnutie vyskytuje, má prednosť.

Zdroj: hab.com

Pridať komentár