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

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

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

Přitom mohou být proměnné v nastavení skupin a projektu nastaveny jako 'soubor' nebo 'běžná proměnná' a zaškrtnuty možnosti 'chráněno' a 'maskovat'.

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

Začneme jednoduchým děděním a postupně to ztížíme.

Se seznámením s konečným seznamem prioritních úrovní se můžete seznámit na konci dokumentu.

Dědění se skupinami [zdroje]

Proměnné ze skupin se dědí s tím pravidlem, že čím blíže je skupina k projektu, tím je její hodnota důležitější.

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 pipeline

$ echo $MSG
B

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

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

Zde je to docela jednoduché: lze nastavit globální proměnnou, nebo ji přepsat uvnitř úlohy.

Skupiny s proměnnými

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

.gitlab-ci.yml

Teď vytvoříme 2 úlohy, v jedné z nich jasně uvedeme $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 pipeline

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

Dědění se skupinami a uvnitř .gitlab-ci.yml [zdroje]

Zkusíme zkombinovat předchozí 2 příklady. Proměnné skupin 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 pipeline

  • echo:
    $ echo $MSG
    Y
    Job succeeded
  • echo with vars:
    $ echo $MSG
    Y
    Job succeeded

Dědění s nastavení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

Proměnné skupin mají menší prioritu.
Jak Gitlab-CI dědí proměnné prostředí?

.gitlab-ci.yml

Využijeme soubor z předchozího příkladu. Zde opět existují proměnné uvedené uvnitř .gitlab-ci.yml, ale proměnné uvnitř skupin mají přesto před nimi prioritu.

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 pipeline

  • echo:
    $ echo $MSG
    project-3
    Job succeeded
  • echo with vars:
    $ echo $MSG
    project-3
    Job succeeded

Dědění s prázdnou hodnotou [zdroje]

Prázdná hodnota – to je také hodnota
Prázdná hodnota – to 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 pipeline

  • echo:
    $ echo $MSG
    Job succeeded
  • echo with vars:
    $ echo $MSG
    Job succeeded

Dědění s includem a skupinami [zdroje]

Zde se pokusíme v project-2 zahrnout project-3
Skupiny mají v tomto případě prioritu.

Skupiny s proměnnými

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

.gitlab-ci.yml

A nastavíme 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 pipeline

  • echo:
    $ echo $MSG
    B
    Job succeeded
  • echo with vars:
    $ echo $MSG
    B
    Job succeeded

Dědění s includem [zdroje]

Zde se pokusíme v project-2 zařadit project-3.
Za podmínky, že: ani skupiny, ani samotný projekt 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 pipeline

  • echo:
    $ echo $MSG
    S include .gitlab-ci.yml
    Úkol uspěl
  • echo with vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Uskutečňují se následující priority:

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

Závěr

Nejvíce nejasným bodem je, že pravidlo „čím blíže je proměnná kódům, tím je důležitější“ nejprve platí pro skupiny a pak stejné pravidlo pro proměnné uvnitř .gitlab-ci.yml, ale pouze za podmínky, že proměnné ve skupinách nejsou nastaveny.
Dalším důležitým bodem je pochopení toho, že globální prostor pro hlavní a zařazený .gitlab-ci.yml je společný. A ten soubor, do kterého dochází k zařazení, má prioritu.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster