A Gitlabban a változókat több helyen is beállíthatjuk:
- A csoportbeállításokban
- A projektbeállításokban
- A .gitlab-ci.yml fájlban
Ezekben a csoport- és projektbeállításokban a változókat «fájl» vagy «normál változó» formájában is beállíthatjuk, valamint kaphatnak «védett» és «maszkos» jelölőnégyzetet.

Kezdjük egy egyszerű örökléssel, és fokozatosan bonyolítjuk.
A prioritási szintek végső listáját a dokumentum végén találhatja.
Ö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 a változó értéke.
Csoportok változókkal

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSGA pipeline eredménye
$ echo $MSG
BHa a változó nem lett volna megadva a B csoportban, akkor A értékét láthattuk volna.
Változók öröklése a .gitlab-ci.yml fájlban [források]
Itt minden elég egyszerű: beállíthatunk egy globális változót, vagy felülírhatjuk azt a munka alatt.
Csoportok változókkal

.gitlab-ci.yml
Most hozzunk létre 2 munkát, az egyiken világosan megadva a $MSG változó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 $MSGA pipeline eredménye
- echo:
$ echo $MSG Custom in global .gitlab-ci.yml A munka sikeresen befejeződött - echo with vars:
$ echo $MSG Custom in job .gitlab-ci.yml A munka sikeresen befejeződött
Öröklés csoportokkal és a .gitlab-ci.yml fájlban [források]
Próbáljuk meg egyesíteni az előző 2 példát. A csoportok változói prioritást élveznek a .gitlab-ci.yml fájlban levő változókkal szemben.
Csoportok változókkal

.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 $MSGA pipeline eredménye
- echo:
$ echo $MSG Y A munka sikeresen befejeződött - echo with vars:
$ echo $MSG Y A munka sikeresen befejeződött
Öröklés a projektbeállításokban megadott változókkal [források]
A projektbeállításokban a változók MINDIG a legmagasabb prioritást élvezik! A .gitlab-ci.yml fájlban megadott változóknak nincs szerepe.
Csoportok változókkal
A csoportok változói alacsonyabb prioritásúak.

.gitlab-ci.yml
Használjuk az előző példa fájlját. Itt ismét megtalálhatóak a .gitlab-ci.yml fájlban megadott változók, de a csoportban levő változók még mindig prioritást élveznek.
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 $MSGA pipeline eredménye
- echo:
$ echo $MSG project-3 A munka sikeresen befejeződött - echo with vars:
$ echo $MSG project-3 A munka sikeresen befejeződött
Öröklés üres értékkel [források]
Az üres érték is egy érték
Az üres érték nem Null
Csoportok változókkal

.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 $MSGA pipeline eredménye
- echo:
$ echo $MSG A munka sikeresen befejeződött - echo with vars:
$ echo $MSG A munka sikeresen befejeződött
Öröklés include-dal és csoportokkal [források]
Itt megpróbáljuk a project-2-ben behozni a project-3-at
A csoportok ebben az esetben prioritást élveznek.
Csoportok változókkal

.gitlab-ci.yml
És beállítunk egy változót globálisan 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'A pipeline eredménye
- echo:
$ echo $MSG B A munka sikeresen befejeződött - echo with vars:
$ echo $MSG B A munka sikeresen befejeződött
Öröklés include-dal [források]
Itt megpróbáljuk a project-2-ben behozni a project-3-at.
A feltétel az, hogy se a csoport, se a projekt nem rendelkezik változókkal.
Csoportok változókkal

.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'A pipeline eredménye
- echo:
$ echo $MSG Include .gitlab-ci.yml A munka sikeresen befejeződött. - echo with vars:
$ echo $MSG Custom in job .gitlab-ci.yml A munka sikeresen befejeződött
A következők jönnek létre. prioritások:
- Változók a projektbeállításokban
- Változók a csoportokban
- Változók, melyek szigorúan a munkahelyen meg vannak határozva (beleértve a beillesztett fájlokat is)
- Globális változók a .gitlab-ci.yml fájlban
- Globális változók a beillesztett fájlokban
Zárás
A legkevésbé nyilvánvaló pont az, hogy a szabály, miszerint "minél közelebb van a változó a kódhoz, annál fontosabb" először a csoportokra vonatkozik, majd ugyanez a szabály vonatkozik a .gitlab-ci.yml fájlban lévő változókra, de csak abban az esetben, ha a csoportokban nem vannak megadva változók.
A következő fontos dolog az, hogy a globális tér az alapértelmezett és a beillesztett .gitlab-ci.yml fájl esetében közös. És az a fájl, amelybe beillesztés történik, prioritást élvez.
Forrás: habr.com
