Miten Gitlab-CI perii ympäristömuuttujat?

Gitlabin muuttujat voidaan asettaa useisiin paikkoihin:

  1. Ryhmän asetuksissa
  2. Projektin asetuksissa
  3. 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.

Miten Gitlab-CI perii ympäristömuuttujat?

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

Miten Gitlab-CI perii ympäristömuuttujat?

.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

Miten Gitlab-CI perii ympäristömuuttujat?

.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

Miten Gitlab-CI perii ympäristömuuttujat?

.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.
Miten Gitlab-CI perii ympäristömuuttujat?

.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

Miten Gitlab-CI perii ympäristömuuttujat?

.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

Miten Gitlab-CI perii ympäristömuuttujat?

.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

Miten Gitlab-CI perii ympäristömuuttujat?

.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:

  1. Muuttujat projektiasetuksissa
  2. Muuttujat ryhmissä
  3. Muuttujat tiukasti määritellyt töissä (mukaan lukien mukana olevat tiedostot)
  4. Globaalit muuttujat .gitlab-ci.yml:n sisällä
  5. 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

Lisää kommentti