Gitlabin muuttujat voidaan asettaa useisiin paikkoihin:
- Ryhmän asetuksissa
- Projektin asetuksissa
- Sisällä .gitlab-ci.yml
Tässä tapauksessa ryhmä- ja projektiasetusten muuttujat voidaan asettaa "tiedostoksi" tai "säännölliseksi muuttujaksi" ja rastita "suojattu" ja "mask" -valintaruudut.
Aloitetaan yksinkertaisesta perinnöstä, ja siitä tulee vähitellen monimutkaisempi.
Lopullinen luettelo prioriteettitasoista löytyy asiakirjan lopusta.
Perintö ryhmien kanssa [lähteet]
Muuttujat ryhmistä periytyvät siten, että mitä lähempänä projektia ryhmä sijaitsee, sitä tärkeämpi sen arvo on.
Ryhmät muuttujilla
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
Putken tulos
$ echo $MSG
B
Jos muuttujaa ei olisi määritetty ryhmässä B, olisimme nähneet arvon A.
Periytyvät muuttujat .gitlab-ci.yml:n sisällä [lähteet]
Täällä kaikki on melko yksinkertaista: voit asettaa muuttujan globaalisti tai voit kirjoittaa sen päälle työn sisällä.
Ryhmät muuttujilla
.gitlab-ci.yml
Luodaan nyt 2 työpaikkaa, joista yhdessä ilmoitamme nimenomaisesti $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
Putken tulos
- kaiku:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- kaiku varsin kanssa:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Periytys ryhmien kanssa ja .gitlab-ci.yml:n sisällä [lähteet]
Yritetään yhdistää 2 edellistä esimerkkiä. Ryhmämuuttujat ovat etusijalla .gitlab-ci.yml:n sisällä oleviin muuttujiin nähden.
Ryhmät muuttujilla
.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
Putken tulos
- kaiku:
$ echo $MSG Y Job succeeded
- kaiku varsin kanssa:
$ echo $MSG Y Job succeeded
Periytys määrittävillä muuttujilla projektiasetuksissa [lähteet]
Projektiasetusten muuttujilla on AINA korkein prioriteetti! Ja .gitlab-ci.yml:n sisällä määritetyillä muuttujilla ei ole mitään merkitystä.
Ryhmät muuttujilla
Ryhmämuuttujilla on alhaisempi prioriteetti.
.gitlab-ci.yml
Käytetään edellisen esimerkin tiedostoa. Tässäkin on .gitlab-ci.yml:n sisällä määritettyjä muuttujia, mutta ryhmien sisällä olevat muuttujat ovat silti niiden edelle.
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
Putken tulos
- kaiku:
$ echo $MSG project-3 Job succeeded
- kaiku varsin kanssa:
$ echo $MSG project-3 Job succeeded
Perintö tyhjällä arvolla [lähteet]
Myös tyhjä arvo on arvo
Tyhjä arvo ei ole nolla
Ryhmät muuttujilla
.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
Putken tulos
- kaiku:
$ echo $MSG Job succeeded
- kaiku varsin kanssa:
$ echo $MSG Job succeeded
Periytys sisällytyksellä ja ryhmillä [lähteet]
Tässä yritämme sisällyttää projektin 2 projektiin 3
Ryhmät ovat tässä tapauksessa etusijalla.
Ryhmät muuttujilla
.gitlab-ci.yml
Ja aseta muuttuja maailmanlaajuisesti tiedostoon .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'
Putken tulos
- kaiku:
$ echo $MSG B Job succeeded
- kaiku varsin kanssa:
$ echo $MSG B Job succeeded
Perinnössä mukana [lähteet]
Tässä yritämme sisällyttää projektin 2 projektiin 3.
Sillä ehdolla: ryhmillä tai itse projektilla ei ole muuttujia.
Ryhmät muuttujilla
.gitlab-ci.yml
Sama kuin edellisessä esimerkissä
variables:
MSG: "With include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'
Putken tulos
- kaiku:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- kaiku varsin kanssa:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Tulokset ovat seuraavat prioriteetteja:
- Muuttujat projektiasetuksissa
- Muuttujat ryhmissä
- Muuttujat tiukasti määritellyt töissä (mukaan lukien mukana olevat tiedostot)
- Globaalit muuttujat .gitlab-ci.yml:n sisällä
- Globaalit muuttujat mukana olevien tiedostojen sisällä
Johtopäätös
Epäselvin kohta on se, että sääntö "mitä lähempänä muuttuja on koodia, sitä tärkeämpi se on" toimii ensin ryhmille ja sitten sama sääntö .gitlab-ci.yml:n sisällä oleville muuttujille, mutta vain ehdolla. että ryhmien muuttujia ei ole määritelty .
Seuraavaksi tärkeä seikka on ymmärtää, että globaali tila pää- ja sisällytettävälle .gitlab-ci.yml-tiedostolle on yleinen. Ja tiedostolla, jossa sisällytys tapahtuu, on etusija.
Lähde: will.com