Kako Gitlab-CI nasljeđuje varijable okoline?

Varijable u Gitlabu mogu se postaviti na nekoliko mjesta:

  1. U postavkama grupe
  2. U postavkama projekta
  3. Unutar .gitlab-ci.yml

U ovom slučaju, varijable u postavkama grupe i projekta mogu se postaviti kao "datoteka" ili "regularna varijabla" i označiti potvrdne okvire "zaštićeno" i "maska".

Kako Gitlab-CI nasljeđuje varijable okoline?

Počnimo s jednostavnim nasljeđivanjem koje će postupno postati složenije.

Konačni popis razina prioriteta nalazi se na kraju dokumenta.

Nasljeđivanje s grupama [izvori]

Varijable iz grupa se nasljeđuju, pri čemu vrijedi pravilo da što je grupa bliže projektu to je njena vrijednost važnija.

Grupe s varijablama

Kako Gitlab-CI nasljeđuje varijable okoline?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Rezultat cjevovoda

$ echo $MSG
B

Da varijabla nije navedena u skupini B, tada bismo vidjeli vrijednost A.

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

Ovdje je sve vrlo jednostavno: varijablu možete postaviti globalno ili je možete prepisati unutar posla.

Grupe s varijablama

Kako Gitlab-CI nasljeđuje varijable okoline?

.gitlab-ci.yml

Kreirajmo sada 2 posla, u jednom od njih ćemo eksplicitno navesti $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 cjevovoda

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

Nasljeđivanje s grupama i unutar .gitlab-ci.yml [izvori]

Pokušajmo spojiti prethodna 2 primjera. Grupne varijable imaju prednost nad varijablama unutar .gitlab-ci.yml.

Grupe s varijablama

Kako Gitlab-CI nasljeđuje varijable okoline?

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

  • jeka:
    $ echo $MSG
    Y
    Job succeeded
  • echo s vars:
    $ echo $MSG
    Y
    Job succeeded

Nasljeđivanje s određivanjem varijabli u postavkama projekta [izvori]

Varijable u postavkama projekta UVIJEK imaju najveći prioritet! A varijable navedene unutar .gitlab-ci.yml ne igraju nikakvu ulogu.

Grupe s varijablama

Grupne varijable imaju niži prioritet.
Kako Gitlab-CI nasljeđuje varijable okoline?

.gitlab-ci.yml

Iskoristimo datoteku iz prethodnog primjera. Ovdje opet postoje varijable navedene unutar .gitlab-ci.yml, ali varijable unutar grupa i dalje imaju prednost nad njima.

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 cjevovoda

  • jeka:
    $ echo $MSG
    project-3
    Job succeeded
  • echo s vars:
    $ echo $MSG
    project-3
    Job succeeded

Nasljeđe s praznom vrijednošću [izvori]

Prazna vrijednost također je vrijednost
Prazna vrijednost nije Null

Grupe s varijablama

Kako Gitlab-CI nasljeđuje varijable okoline?

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

  • jeka:
    $ echo $MSG
    Job succeeded
  • echo s vars:
    $ echo $MSG
    Job succeeded

Nasljeđivanje s uključivanjem i grupama [izvori]

Ovdje ćemo pokušati uključiti projekt-2 u projekt-3
Grupe u ovom slučaju imaju prednost.

Grupe s varijablama

Kako Gitlab-CI nasljeđuje varijable okoline?

.gitlab-ci.yml

I postavite varijablu globalno u .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 cjevovoda

  • jeka:
    $ echo $MSG
    B
    Job succeeded
  • echo s vars:
    $ echo $MSG
    B
    Job succeeded

Nasljeđivanje s uključivanjem [izvori]

Ovdje ćemo pokušati uključiti projekt-2 u projekt-3.
Uz uvjet da: niti grupe niti sam projekt nemaju varijabli.

Grupe s varijablama

Kako Gitlab-CI nasljeđuje varijable okoline?

.gitlab-ci.yml

Isto kao u prethodnom primjeru

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 cjevovoda

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

Rezultati su sljedeći prioriteti:

  1. Varijable u postavkama projekta
  2. Varijable u skupinama
  3. Varijable strogo navedene unutar poslova (uključujući uključene datoteke)
  4. Globalne varijable unutar .gitlab-ci.yml
  5. Globalne varijable unutar uključenih datoteka

Zaključak

Najočitija točka je da pravilo "što je varijabla bliže kodu, to je važnija" prvo radi za grupe, a zatim isto pravilo za varijable unutar .gitlab-ci.yml, ali samo pod uvjetom da varijable u grupama nisu navedene .
Zatim, važno je shvatiti da je globalni prostor za glavni i uključeni .gitlab-ci.yml zajednički. I datoteka u kojoj se uključuje ima prioritet.

Izvor: www.habr.com

Dodajte komentar