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

Varijable u Gitlabu se mogu postaviti na nekoliko mjesta:

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

U ovom slučaju, varijable u grupnim i projektnim postavkama mogu se postaviti kao "datoteka" ili "obična varijabla" i označiti potvrdne okvire "zaštićeno" i "maskirati".

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

Počnimo s jednostavnim nasljeđivanjem i postepeno će postati složenije.

Konačna lista nivoa prioriteta nalazi se na kraju dokumenta.

Nasljeđivanje sa grupama [izvori]

Varijable iz grupa se nasljeđuju, s tim da što je grupa bliže projektu, to je njena vrijednost važnija.

Grupe sa varijablama

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

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Rezultat naftovoda

$ echo $MSG
B

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

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

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

Grupe sa varijablama

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

.gitlab-ci.yml

Kreirajmo sada 2 posla, u jednom od njih ćemo eksplicitno naznačiti $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 naftovoda

  • eho:
    $ 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 sa grupama i unutar .gitlab-ci.yml [izvori]

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

Grupe sa varijablama

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

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

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

Nasljeđivanje sa specificiranjem varijabli u postavkama projekta [izvori]

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

Grupe sa varijablama

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

.gitlab-ci.yml

Koristimo datoteku iz prethodnog primjera. Ovdje opet postoje varijable specificirane 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 naftovoda

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

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

Prazna vrijednost je također vrijednost
Prazna vrijednost nije Null

Grupe sa varijablama

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

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

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

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

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

Grupe sa varijablama

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

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

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

Nasljeđivanje sa uključivanjem [izvori]

Ovdje ćemo pokušati uključiti projekt-2 u projekat-3.
Uz uslov da: ni grupe ni sam projekat nemaju varijable.

Grupe sa varijablama

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

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

  • eho:
    $ 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 grupama
  3. Varijable striktno specificirane unutar poslova (uključujući uključene datoteke)
  4. Globalne varijable unutar .gitlab-ci.yml
  5. Globalne varijable unutar uključenih datoteka

zaključak

Najneočiglednija stvar je da pravilo „što je varijabla bliža kodu, to je važnija“ prvo radi za grupe, a zatim isto pravilo za varijable unutar .gitlab-ci.yml, ali samo pod uslovom da varijable u grupama nisu specificirane.
Zatim, važna stvar je razumjeti da je globalni prostor za glavni i uključeni .gitlab-ci.yml uobičajen. Prioritet ima datoteka u kojoj se javlja uključivanje.

izvor: www.habr.com

Dodajte komentar