Ako Gitlab-CI zdedí premenné prostredia?

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

  1. V nastaveniach skupín
  2. V nastaveniach projektu
  3. V súbore .gitlab-ci.yml

Pri tom je možné nastaviť premenné v nastaveniach skupín a projektu ako „súbor“ alebo „bežnú premennú“ a zaškrtnúť možnosti „chránené“ a „maskovať“.

Ako Gitlab-CI zdedí premenné prostredia?

Začneme s jednoduchým dedičstvom a postupne to skomplikujeme.

S konečným zoznamom úrovní priorít sa môžete oboznámiť na konci dokumentu.

Dedičstvo so skupinami [zdrojové súbory]

Premenné zo skupín sa dedičia s pravidlom, že čím bližšie je skupina umiestnená k projektu, tým je jej hodnota dôležitejšia.

Skupiny s premennými

Ako Gitlab-CI zdedí premenné prostredia?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Výsledok pipeline

$ echo $MSG
B

Ak by premenná nebola uvedená v skupine B, videli by sme hodnotu A.

Dedičstvo premenných v .gitlab-ci.yml [zdrojové súbory]

Tu je to celkom jednoduché: môžete nastaviť globálnu premennú, alebo ju môžete prepísať v rámci jobu.

Skupiny s premennými

Ako Gitlab-CI zdedí premenné prostredia?

.gitlab-ci.yml

Teraz vytvoríme 2 joby, v jednom z nich výslovne uvedieme $MSG.

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Vlastné v globálnom .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo s premennou:
  stage: test
  variables:
    MSG: "Vlastné v jobe .gitlab-ci.yml"
  script:
    - echo $MSG

Výsledok pipeline

  • echo:
    $ echo $MSG
    Vlastné v globálnom .gitlab-ci.yml
    Job úspešne dokončený
  • echo s premennými:
    $ echo $MSG
    Vlastné v jobe .gitlab-ci.yml
    Job úspešne dokončený

Dedičstvo so skupinami a vo vnútri .gitlab-ci.yml [zdrojové súbory]

Skúsime spojiť predchádzajúce 2 príklady. Premenné skupín majú prednosť pred premennými vo vnútri .gitlab-ci.yml.

Skupiny s premennými

Ako Gitlab-CI zdedí premenné prostredia?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Vlastné v globálnom .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo s premennou:
  stage: test
  variables:
    MSG: "Vlastné v jobe .gitlab-ci.yml"
  script:
    - echo $MSG

Výsledok pipeline

  • echo:
    $ echo $MSG
    Y
    Job úspešne dokončený
  • echo s premennými:
    $ echo $MSG
    Y
    Job úspešne dokončený

Dedičstvo s uvedením premenných v nastaveniach projektu [zdrojové súbory]

Premenné v nastaveniach projektu majú VŽDY najvyššiu prioritu! A premenné uvedené vo vnútri .gitlab-ci.yml nehráva žiadnu úlohu.

Skupiny s premennými

Premenné skupín majú menšiu prioritu.
Ako Gitlab-CI zdedí premenné prostredia?

.gitlab-ci.yml

Využijeme súbor z predchádzajúceho príkladu. Tu opäť existujú premenné uvedené vo vnútri .gitlab-ci.yml, ale premenné v skupinách majú pred nimi prednosť.

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Vlastné v globálnom .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo s premennou:
  stage: test
  variables:
    MSG: "Vlastné v jobe .gitlab-ci.yml"
  script:
    - echo $MSG

Výsledok pipeline

  • echo:
    $ echo $MSG
    project-3
    Job úspešne dokončený
  • echo s premennými:
    $ echo $MSG
    project-3
    Job úspešne dokončený

Dedičstvo s prázdnou hodnotou [zdrojové súbory]

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

Skupiny s premennými

Ako Gitlab-CI zdedí premenné prostredia?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Vlastné v globálnom .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo s premennou:
  stage: test
  variables:
    MSG: "Vlastné v jobe .gitlab-ci.yml"
  script:
    - echo $MSG

Výsledok pipeline

  • echo:
    $ echo $MSG
    Job úspešne dokončený
  • echo s premennými:
    $ echo $MSG
    Job úspešne dokončený

Dedičstvo s inlúdom a skupinami [zdrojové súbory]

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

Skupiny s premennými

Ako Gitlab-CI zdedí premenné prostredia?

.gitlab-ci.yml

A nastavíme premennú globálne v .gitlab-ci.yml

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

Výsledok pipeline

  • echo:
    $ echo $MSG
    B
    Job úspešne dokončený
  • echo s premennými:
    $ echo $MSG
    B
    Job úspešne dokončený

Dedičstvo s inlúdom [zdrojové súbory]

Tu sa pokúsime v project-2 zahrnúť project-3.
Za predpokladu, že ani skupina, ani samotný projekt nemajú žiadne premenné.

Skupiny s premennými

Ako Gitlab-CI zdedí premenné prostredia?

.gitlab-ci.yml

Rovnako ako v predchádzajúcom príklade

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

Výsledok pipeline

  • echo:
    $ echo $MSG
    S obsahom .gitlab-ci.yml
    Práca bola úspešná
  • echo s premennými:
    $ echo $MSG
    Vlastné v jobe .gitlab-ci.yml
    Job úspešne dokončený

Výsledkom sú nasledujúce priority:

  1. Premenné v nastaveniach projektu
  2. Premenné v skupinách
  3. Premenné presne uvedené v rámci úlohy (vrátane zaincludovaných súborov)
  4. Globálne premenné v .gitlab-ci.yml
  5. Globálne premenné v zaincludovaných súboroch

Záver

Najmenej zjavný aspekt spočíva v tom, že pravidlo „čím bližšie je premenná kódu, tým je dôležitejšia“ platí najskôr pre skupiny a potom rovnaké pravidlo pre premenné v .gitlab-ci.yml, ale len s podmienkou, že premenné v skupinách nie sú zadané.
Ďalším dôležitým miestom je pochopenie toho, že globálny priestor pre hlavné a zaincludované .gitlab-ci.yml je spoločný. A ten súbor, do ktorého prebieha include, má prioritu.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster