Hogyan örökli a Gitlab-CI a környezeti változókat?

A Gitlab változói több helyen is beállíthatók:

  1. A csoportbeállításokban
  2. A projekt beállításaiban
  3. A .gitlab-ci.yml belsejében

Ebben az esetben a csoport- és projektbeállítások változói beállíthatók „fájl” vagy „szabályos változó”-ként, és bejelölhetjük a „védett” és a „maszk” jelölőnégyzeteket.

Hogyan örökli a Gitlab-CI a környezeti változókat?

Kezdjük az egyszerű örökléssel, és fokozatosan bonyolultabbá válik.

A prioritási szintek végleges listája a dokumentum végén található.

Öröklés csoportokkal [források]

A csoportokból származó változók öröklődnek, azzal a szabállyal, hogy minél közelebb van a csoport a projekthez, annál fontosabb az értéke.

Csoportok változókkal

Hogyan örökli a Gitlab-CI a környezeti változókat?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Csővezeték eredménye

$ echo $MSG
B

Ha a változó nem lett volna megadva a B csoportban, akkor az A értéket láttuk volna.

Változók öröklése a .gitlab-ci.yml fájlban [források]

Itt minden nagyon egyszerű: beállíthatunk egy változót globálisan, vagy felülírhatjuk a jobon belül.

Csoportok változókkal

Hogyan örökli a Gitlab-CI a környezeti változókat?

.gitlab-ci.yml

Most hozzunk létre 2 munkahelyet, az egyikben kifejezetten feltüntetjük a $MSG-t.

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

Csővezeték eredménye

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

Öröklődés csoportokkal és a .gitlab-ci.yml-en belül [források]

Próbáljuk meg kombinálni az előző 2 példát. A csoportváltozók elsőbbséget élveznek a .gitlab-ci.yml fájlban lévő változókkal szemben.

Csoportok változókkal

Hogyan örökli a Gitlab-CI a környezeti változókat?

.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

Csővezeték eredménye

  • visszhang:
    $ echo $MSG
    Y
    Job succeeded
  • visszhang varssal:
    $ echo $MSG
    Y
    Job succeeded

Öröklődés a projektbeállításokban megadott változókkal [források]

A projektbeállítások változóinak MINDIG a legmagasabb prioritása van! A .gitlab-ci.yml fájlban megadott változók pedig nem játszanak szerepet.

Csoportok változókkal

A csoportváltozók alacsonyabb prioritásúak.
Hogyan örökli a Gitlab-CI a környezeti változókat?

.gitlab-ci.yml

Használjuk az előző példa fájlját. Itt is vannak változók megadva a .gitlab-ci.yml fájlban, de a csoportokon belüli változók továbbra is elsőbbséget élveznek velük szemben.

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

Csővezeték eredménye

  • visszhang:
    $ echo $MSG
    project-3
    Job succeeded
  • visszhang varssal:
    $ echo $MSG
    project-3
    Job succeeded

Öröklés üres értékkel [források]

Az üres érték is érték
Az üres érték nem nulla

Csoportok változókkal

Hogyan örökli a Gitlab-CI a környezeti változókat?

.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

Csővezeték eredménye

  • visszhang:
    $ echo $MSG
    Job succeeded
  • visszhang varssal:
    $ echo $MSG
    Job succeeded

Öröklődés az include-mal és csoportokkal [források]

Itt megpróbáljuk a 2-as projektet beépíteni a 3-es projektbe
Ebben az esetben a csoportok élveznek elsőbbséget.

Csoportok változókkal

Hogyan örökli a Gitlab-CI a környezeti változókat?

.gitlab-ci.yml

És állítsa be globálisan a változót a .gitlab-ci.yml fájlban

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

Csővezeték eredménye

  • visszhang:
    $ echo $MSG
    B
    Job succeeded
  • visszhang varssal:
    $ echo $MSG
    B
    Job succeeded

Öröklődés, beleértve [források]

Itt megpróbáljuk a 2-as projektet beépíteni a 3-es projektbe.
Azzal a feltétellel, hogy: sem a csoportoknak, sem magának a projektnek nincs változója.

Csoportok változókkal

Hogyan örökli a Gitlab-CI a környezeti változókat?

.gitlab-ci.yml

Ugyanaz, mint az előző példában

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

Csővezeték eredménye

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

Az eredmények a következők prioritások:

  1. Változók a projektbeállításokban
  2. Változók csoportokban
  3. A feladatokon belül szigorúan meghatározott változók (beleértve a mellékelt fájlokat is)
  4. Globális változók a .gitlab-ci.yml fájlban
  5. Globális változók a mellékelt fájlokon belül

Következtetés

A legkevésbé nyilvánvaló, hogy a „minél közelebb van egy változó a kódhoz, annál fontosabb” szabály először csoportokra vonatkozik, majd ugyanez a szabály a .gitlab-ci.yml fájlban lévő változókra, de csak a feltétel mellett hogy a csoportokban a változók nincsenek megadva .
Ezt követően fontos megérteni, hogy a fő és a benne foglalt .gitlab-ci.yml globális tere közös. És a fájl, amelyben a felvétel történik, elsőbbséget élvez.

Forrás: will.com

Hozzászólás