Kako Gitlab-CI podeduje spremenljivke okolja?

Spremenljivke v Gitlabu lahko nastavite na več mestih:

  1. V nastavitvah skupine
  2. V nastavitvah projekta
  3. Znotraj .gitlab-ci.yml

V tem primeru lahko spremenljivke v nastavitvah skupine in projekta nastavite kot »datoteka« ali »navadna spremenljivka« in označite potrditvena polja »zaščiteno« in »maska«.

Kako Gitlab-CI podeduje spremenljivke okolja?

Začnimo s preprostim dedovanjem, ki bo postopoma postalo bolj zapleteno.

Končni seznam prednostnih stopenj je na koncu dokumenta.

Dedovanje s skupinami [viri]

Spremenljivke iz skupin se dedujejo, pri čemer velja pravilo, da čim bližje se skupina nahaja projektu, tem pomembnejša je njena vrednost.

Skupine s spremenljivkami

Kako Gitlab-CI podeduje spremenljivke okolja?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Rezultat cevovoda

$ echo $MSG
B

Če spremenljivka ne bi bila navedena v skupini B, bi videli vrednost A.

Dedovanje spremenljivk znotraj .gitlab-ci.yml [viri]

Tukaj je vse precej preprosto: spremenljivko lahko nastavite globalno ali pa jo prepišete znotraj opravila.

Skupine s spremenljivkami

Kako Gitlab-CI podeduje spremenljivke okolja?

.gitlab-ci.yml

Ustvarimo zdaj 2 opravili, v enem od njih bomo izrecno navedli $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

Rezultat cevovoda

  • odmev:
    $ echo $MSG
    Custom in global .gitlab-ci.yml
    Job succeeded
  • odmev z vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Dedovanje s skupinami in znotraj .gitlab-ci.yml [viri]

Poskusimo združiti prejšnja 2 primera. Spremenljivke skupine imajo prednost pred spremenljivkami znotraj .gitlab-ci.yml.

Skupine s spremenljivkami

Kako Gitlab-CI podeduje spremenljivke okolja?

.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

Rezultat cevovoda

  • odmev:
    $ echo $MSG
    Y
    Job succeeded
  • odmev z vars:
    $ echo $MSG
    Y
    Job succeeded

Dedovanje s podajanjem spremenljivk v nastavitvah projekta [viri]

Spremenljivke v nastavitvah projekta imajo VEDNO najvišjo prioriteto! In spremenljivke, določene znotraj .gitlab-ci.yml, ne igrajo nobene vloge.

Skupine s spremenljivkami

Skupinske spremenljivke imajo nižjo prednost.
Kako Gitlab-CI podeduje spremenljivke okolja?

.gitlab-ci.yml

Uporabimo datoteko iz prejšnjega primera. Tudi tukaj so spremenljivke določene znotraj .gitlab-ci.yml, vendar imajo spremenljivke znotraj skupin še vedno prednost pred njimi.

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

Rezultat cevovoda

  • odmev:
    $ echo $MSG
    project-3
    Job succeeded
  • odmev z vars:
    $ echo $MSG
    project-3
    Job succeeded

Dedovanje s prazno vrednostjo [viri]

Prazna vrednost je tudi vrednost
Prazna vrednost ni Null

Skupine s spremenljivkami

Kako Gitlab-CI podeduje spremenljivke okolja?

.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

Rezultat cevovoda

  • odmev:
    $ echo $MSG
    Job succeeded
  • odmev z vars:
    $ echo $MSG
    Job succeeded

Dedovanje z vključitvijo in skupinami [viri]

Tukaj bomo poskušali projekt-2 vključiti v projekt-3
Skupine imajo v tem primeru prednost.

Skupine s spremenljivkami

Kako Gitlab-CI podeduje spremenljivke okolja?

.gitlab-ci.yml

In nastavite spremenljivko globalno v .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'

Rezultat cevovoda

  • odmev:
    $ echo $MSG
    B
    Job succeeded
  • odmev z vars:
    $ echo $MSG
    B
    Job succeeded

Dedovanje z vključenim [viri]

Tukaj bomo poskušali projekt-2 vključiti v projekt-3.
Pod pogojem, da: niti skupine niti sam projekt nimata spremenljivk.

Skupine s spremenljivkami

Kako Gitlab-CI podeduje spremenljivke okolja?

.gitlab-ci.yml

Enako kot v prejšnjem primeru

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

Rezultat cevovoda

  • odmev:
    $ echo $MSG
    With include .gitlab-ci.yml
    Job succeeded
  • odmev z vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Rezultati so naslednji prednostne naloge:

  1. Spremenljivke v nastavitvah projekta
  2. Spremenljivke v skupinah
  3. Spremenljivke, ki so strogo določene znotraj opravil (vključno z vključenimi datotekami)
  4. Globalne spremenljivke znotraj .gitlab-ci.yml
  5. Globalne spremenljivke znotraj vključenih datotek

Zaključek

Najbolj neočitna točka je, da pravilo »bližje kot je spremenljivka kodi, bolj je pomembna« najprej deluje za skupine, nato pa isto pravilo za spremenljivke znotraj .gitlab-ci.yml, vendar le pod pogojem da spremenljivke v skupinah niso podane .
Nato je pomembno razumeti, da je globalni prostor za glavni in vključeni .gitlab-ci.yml skupen. Datoteka, v kateri pride do vključitve, ima prednost.

Vir: www.habr.com

Dodaj komentar