Kako Gitlab-CI nasleđuje varijable okruženja?

Varijable u Gitlabu mogu se postaviti na nekoliko mesta:

  1. U podešavanjima grupa
  2. U podešavanjima projekta
  3. Unutar .gitlab-ci.yml

Pri tome, varijable u podešavanjima grupa i projekta mogu se postaviti kao „fajl“ ili „obična varijabla“ i oznake „zaštićeno“ i „maskirati“ mogu se uključiti.

Kako Gitlab-CI nasleđuje varijable okruženja?

Počnimo sa jednostavnim nasleđivanjem i postepeno ćemo ga komplikovati.

Konačna lista nivoa prioriteta može se pregledati na kraju dokumenta.

Nasleđivanje kroz grupe [izvori]

Varijable iz grupa se nasleđuju, pod uslovom da što je grupa bliža projektu, njena vrednost je važnija.

Grupe sa varijablama

Kako Gitlab-CI nasleđuje varijable okruženja?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Rezultat pipeline-a

$ echo $MSG
B

Da je varijabla bila neuvešena u grupi B, videli bismo vrednost A.

Nasleđivanje varijabli unutar .gitlab-ci.yml [izvori]

Ovdje je sve prilično jednostavno: varijablu se može postaviti globalno ili ju možemo prepisati unutar posla.

Grupe s varijablama

Kako Gitlab-CI nasleđuje varijable okruženja?

.gitlab-ci.yml

Sada ćemo kreirati 2 posla, u jednom od njih eksplicitno ćemo naznačiti $MSG.

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Prilagođeno u globalnom .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo sa var: 
  stage: test
  variables:
    MSG: "Prilagođeno u poslu .gitlab-ci.yml"
  script:
    - echo $MSG

Rezultat pipeline-a

  • echo:
    $ echo $MSG
    Prilagođeno u globalnom .gitlab-ci.yml
    Posao je uspešno završen
  • echo sa varijablama:
    $ echo $MSG
    Prilagođeno u poslu .gitlab-ci.yml
    Posao je uspešno završen

Nasleđivanje kroz grupe i unutar .gitlab-ci.yml [izvori]

Pokušajmo da spojimo prethodna 2 primera. Varijable grupa imaju prioritet ispred varijabli unutar .gitlab-ci.yml.

Grupe s varijablama

Kako Gitlab-CI nasleđuje varijable okruženja?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Prilagođeno u globalnom .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo sa var: 
  stage: test
  variables:
    MSG: "Prilagođeno u poslu .gitlab-ci.yml"
  script:
    - echo $MSG

Rezultat pipeline-a

  • echo:
    $ echo $MSG
    Y
    Posao je uspešno završen
  • echo sa varijablama:
    $ echo $MSG
    Y
    Posao je uspešno završen

Nasleđivanje sa naznačenim varijablama u podešavanjima projekta [izvori]

Varijable u podešavanjima projekta UVEK imaju najviši prioritet! A varijable naznačene unutar .gitlab-ci.yml ne igraju nikakvu ulogu.

Grupe s varijablama

Varijable grupa imaju manji prioritet.
Kako Gitlab-CI nasleđuje varijable okruženja?

.gitlab-ci.yml

Koristićemo fajl iz prethodnog primera. Ovde opet postoje varijable naznačene unutar .gitlab-ci.yml, ali varijable unutar grupa imaju prioritet ispred njih.

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Prilagođeno u globalnom .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo sa var: 
  stage: test
  variables:
    MSG: "Prilagođeno u poslu .gitlab-ci.yml"
  script:
    - echo $MSG

Rezultat pipeline-a

  • echo:
    $ echo $MSG
    project-3
    Posao je uspešno završen
  • echo sa varijablama:
    $ echo $MSG
    project-3
    Posao je uspešno završen

Nasleđivanje sa praznim vrednostima [izvori]

Prazna vrednost – to je takođe vrednost
Prazna vrednost – to nije Null

Grupe s varijablama

Kako Gitlab-CI nasleđuje varijable okruženja?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Prilagođeno u globalnom .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo sa var: 
  stage: test
  variables:
    MSG: "Prilagođeno u poslu .gitlab-ci.yml"
  script:
    - echo $MSG

Rezultat pipeline-a

  • echo:
    $ echo $MSG
    Posao je uspešno završen
  • echo sa varijablama:
    $ echo $MSG
    Posao je uspešno završen

Nasleđivanje sa uključivanjem i grupama [izvori]

Ovdje ćemo pokušati da uključimo project-3 u project-2
Grupe u ovom slučaju imaju prioritet.

Grupe s varijablama

Kako Gitlab-CI nasleđuje varijable okruženja?

.gitlab-ci.yml

I postavićemo varijablu globalno u .gitlab-ci.yml

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

Rezultat pipeline-a

  • echo:
    $ echo $MSG
    B
    Posao je uspešno završen
  • echo sa varijablama:
    $ echo $MSG
    B
    Posao je uspešno završen

Nasleđivanje sa uključivanjem [izvori]

Tukaj bomo poskusili vključiti project-3 v project-2.
Pod pogojem, da: niti skupine niti sam projekt nimata nobenih spremenljivk.

Grupe s varijablama

Kako Gitlab-CI nasleđuje varijable okruženja?

.gitlab-ci.yml

Enako kot v prejšnjem primeru

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

Rezultat pipeline-a

  • echo:
    $ echo $MSG
    Z vključitvijo .gitlab-ci.yml
    Opravljeno
  • echo sa varijablama:
    $ echo $MSG
    Prilagođeno u poslu .gitlab-ci.yml
    Posao je uspešno završen

Dobimo naslednje prioritete:

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

Zaključek

Najmanj očitna točka je, da pravilo 'čim bližje je spremenljivka kodu, tem večja je njena pomembnost' velja najprej za skupine, nato pa enako pravilo tudi za spremenljivke znotraj .gitlab-ci.yml, toda samo pod pogojem, da spremenljivke v skupinah niso določene.
Nadalje je pomembno razumeti, da je globalni prostor za glavni in vključen .gitlab-ci.yml skupen. In tisti datoteki, v katero se vključuje, ima prednost.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster