Jak Gitlab-CI dědí proměnné prostředí?

Proměnné v Gitlabu lze nastavit na několika místech:

  1. V nastavení skupiny
  2. V nastavení projektu
  3. Uvnitř .gitlab-ci.yml

V tomto případě lze proměnné v nastavení skupiny a projektu nastavit jako „soubor“ nebo „běžná proměnná“ a zaškrtnout políčka „chráněno“ a „maska“.

Jak Gitlab-CI dědí proměnné prostředí?

Začněme jednoduchým děděním a postupně to bude složitější.

Konečný seznam úrovní priority naleznete na konci dokumentu.

Dědičnost se skupinami [Zdroje]

Proměnné ze skupin se dědí, přičemž platí, že čím blíže se skupina nachází k projektu, tím důležitější je její hodnota.

Skupiny s proměnnými

Jak Gitlab-CI dědí proměnné prostředí?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Výsledek potrubí

$ echo $MSG
B

Pokud by proměnná nebyla specifikována ve skupině B, pak bychom viděli hodnotu A.

Dědění proměnných uvnitř .gitlab-ci.yml [Zdroje]

Zde je vše docela jednoduché: proměnnou můžete nastavit globálně, nebo ji můžete přepsat uvnitř úlohy.

Skupiny s proměnnými

Jak Gitlab-CI dědí proměnné prostředí?

.gitlab-ci.yml

Vytvořme nyní 2 úlohy, v jedné z nich výslovně označíme $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ýsledek potrubí

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

Dědičnost se skupinami a uvnitř .gitlab-ci.yml [Zdroje]

Zkusme spojit předchozí 2 příklady. Skupinové proměnné mají přednost před proměnnými uvnitř .gitlab-ci.yml.

Skupiny s proměnnými

Jak Gitlab-CI dědí proměnné prostředí?

.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ýsledek potrubí

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

Dědičnost se zadáním proměnných v nastavení projektu [Zdroje]

Proměnné v nastavení projektu mají VŽDY nejvyšší prioritu! A proměnné uvedené uvnitř .gitlab-ci.yml nehrají žádnou roli.

Skupiny s proměnnými

Skupinové proměnné mají nižší prioritu.
Jak Gitlab-CI dědí proměnné prostředí?

.gitlab-ci.yml

Použijme soubor z předchozího příkladu. Zde jsou opět proměnné specifikované uvnitř .gitlab-ci.yml, ale proměnné uvnitř skupin před nimi mají stále přednost.

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ýsledek potrubí

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

Dědičnost s prázdnou hodnotou [Zdroje]

Prázdná hodnota je také hodnota
Prázdná hodnota není Null

Skupiny s proměnnými

Jak Gitlab-CI dědí proměnné prostředí?

.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ýsledek potrubí

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

Dědičnost s include a skupinami [Zdroje]

Zde se pokusíme zahrnout projekt-2 do projektu-3
Skupiny mají v tomto případě přednost.

Skupiny s proměnnými

Jak Gitlab-CI dědí proměnné prostředí?

.gitlab-ci.yml

A nastavte proměnnou globálně 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ýsledek potrubí

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

Dědičnost s zahrnutím [Zdroje]

Zde se pokusíme zahrnout projekt-2 do projektu-3.
S podmínkou, že: skupiny ani projekt samotný nemají žádné proměnné.

Skupiny s proměnnými

Jak Gitlab-CI dědí proměnné prostředí?

.gitlab-ci.yml

Stejné jako v předchozím příkladu

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ýsledek potrubí

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

Výsledky jsou následující priority:

  1. Proměnné v nastavení projektu
  2. Proměnné ve skupinách
  3. Proměnné přesně specifikované uvnitř úloh (včetně zahrnutých souborů)
  4. Globální proměnné uvnitř .gitlab-ci.yml
  5. Globální proměnné uvnitř zahrnutých souborů

Závěr

Nejméně zřejmým bodem je, že pravidlo „čím blíže je proměnná ke kódu, tím je důležitější“ funguje nejprve pro skupiny a poté stejné pravidlo pro proměnné uvnitř .gitlab-ci.yml, ale pouze za podmínky že proměnné ve skupinách nejsou specifikovány .
Dále je důležité pochopit, že globální prostor pro hlavní a zahrnutý .gitlab-ci.yml je společný. A soubor, ve kterém k zahrnutí dochází, má přednost.

Zdroj: www.habr.com

Přidat komentář