A Gitlab változói több helyen is beállíthatók:
- A csoportbeállításokban
- A projekt beállításaiban
- 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.
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
.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
.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
.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.
.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
.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
.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
.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:
- Változók a projektbeállításokban
- Változók csoportokban
- A feladatokon belül szigorúan meghatározott változók (beleértve a mellékelt fájlokat is)
- Globális változók a .gitlab-ci.yml fájlban
- 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