Kuidas Gitlab-CI pärib keskkonnamuutujaid?

Gitlabis saab muutujaid määrata mitmes kohas:

  1. Rühma seadetes
  2. Projektide seadetes
  3. Failis .gitlab-ci.yml

Samas saab rühma ja projekti seadetes määrata muutujad kui „fail” või „tavaline muutuja” ning märkida valikuid „kaitstud” ja „maskeeritud”.

Kuidas Gitlab-CI pärib keskkonnamuutujaid?

Alustame lihtsast pärandamisest ja keerame seda järk-järgult keerulisemaks.

Lõpliku prioriteetide loetelu saab vaadata dokumendi lõpus.

Pärimine rühmade abil [allikad]

Rühmades määratud muutujad pärinevad, järgides reeglit, et mida lähemal on rühm projektile, seda olulisem on selle väärtus.

Rühmad koos muutujaid

Kuidas Gitlab-CI pärib keskkonnamuutujaid?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Pipelinesi tulemus

$ echo $MSG
B

Kui muutuja poleks rühmas B määratud, oleksime näinud väärtust A.

Muutujate pärimine .gitlab-ci.yml sees [allikad]

Siin on kõik üsna lihtne: saad määrata muutuja globaalsetena või kirjutada selle töö sees üle.

Rühmad koos muutujaid

Kuidas Gitlab-CI pärib keskkonnamuutujaid?

.gitlab-ci.yml

Loome nüüd 2 tööd, millest ühes määrame selgelt $MSG.

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Kohandatud globaalses .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo with var:
  stage: test
  variables:
    MSG: "Kohandatud töö .gitlab-ci.yml"
  script:
    - echo $MSG

Pipelinesi tulemus

  • echo:
    $ echo $MSG
    Kohandatud globaalsetes .gitlab-ci.yml
    Töö õnnestus
  • echo koos muutujaid:
    $ echo $MSG
    Kohandatud töö .gitlab-ci.yml
    Töö õnnestus

Pärimine rühmadest ja .gitlab-ci.yml sees [allikad]

Proovime ühendada eelnevaid 2 näidet. Rühma muutujad on eelised muutuja üle .gitlab-ci.yml.

Rühmad koos muutujaid

Kuidas Gitlab-CI pärib keskkonnamuutujaid?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Kohandatud globaalses .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo with var:
  stage: test
  variables:
    MSG: "Kohandatud töö .gitlab-ci.yml"
  script:
    - echo $MSG

Pipelinesi tulemus

  • echo:
    $ echo $MSG
    Y
    Töö õnnestus
  • echo koos muutujaid:
    $ echo $MSG
    Y
    Töö õnnestus

Muutujate pärimine projekti seadetes [allikad]

Muutujad projekti seadetes on ALATI kõrgeima prioriteediga! Ja .gitlab-ci.yml sees määratud muutujatel pole mingit rolli.

Rühmad koos muutujaid

Rühma muutujatel on madalam prioriteet.
Kuidas Gitlab-CI pärib keskkonnamuutujaid?

.gitlab-ci.yml

Kasutame eelnevas näites olevaid faile. Siin on jälle muutujad, mis on määratud .gitlab-ci.yml sees, kuid rühmade muutujatel on endiselt nende ees prioriteet.

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Kohandatud globaalses .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo with var:
  stage: test
  variables:
    MSG: "Kohandatud töö .gitlab-ci.yml"
  script:
    - echo $MSG

Pipelinesi tulemus

  • echo:
    $ echo $MSG
    projekt-3
    Töö õnnestus
  • echo koos muutujaid:
    $ echo $MSG
    projekt-3
    Töö õnnestus

Pärimine tühja väärtusega [allikad]

Tühi väärtus on samuti väärtus
Tühi väärtus ei ole Null

Rühmad koos muutujaid

Kuidas Gitlab-CI pärib keskkonnamuutujaid?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Kohandatud globaalses .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo with var:
  stage: test
  variables:
    MSG: "Kohandatud töö .gitlab-ci.yml"
  script:
    - echo $MSG

Pipelinesi tulemus

  • echo:
    $ echo $MSG
    Töö õnnestus
  • echo koos muutujaid:
    $ echo $MSG
    Töö õnnestus

Pärimine lisamise ja rühmadega [allikad]

Siin proovime project-2-sse lisada project-3
Rühmadel on sel juhul prioriteet.

Rühmad koos muutujaid

Kuidas Gitlab-CI pärib keskkonnamuutujaid?

.gitlab-ci.yml

Ja määrame muutuja globaalset .gitlab-ci.yml

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

Pipelinesi tulemus

  • echo:
    $ echo $MSG
    B
    Töö õnnestus
  • echo koos muutujaid:
    $ echo $MSG
    B
    Töö õnnestus

Pärimine lisamisega [allikad]

Siin proovime project-2-sse sisse tuua project-3.
Eeldusel, et ei rühmadel ega projektil endal ei ole mingeid muutujaid.

Rühmad koos muutujaid

Kuidas Gitlab-CI pärib keskkonnamuutujaid?

.gitlab-ci.yml

Sama nagu eelnevas näites

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

Pipelinesi tulemus

  • echo:
    $ echo $MSG
    Include .gitlab-ci.yml
    Töö õnnestus
  • echo koos muutujaid:
    $ echo $MSG
    Kohandatud töö .gitlab-ci.yml
    Töö õnnestus

Saame järgmised prioriteedid:

  1. Muutujad projekti seadetes
  2. Muutujad rühmades
  3. Töös rangelt määratletud muutujad (kaasa arvatud sisse toodud failid)
  4. Globaalsete muutujate väärtused .gitlab-ci.yml failis
  5. Globaalsete muutujate väärtused sisse toodud failides

Kokkuvõte

Kõige vähem ilmne moment on see, et reegel «mida lähemal muutuja koodile, seda olulisem» kehtib kõigepealt rühmade jaoks ja seejärel kehtib sama reegel ka .gitlab-ci.yml failide muutujate kohta, kuid tingimusel, et rühmades ei ole muutujaid määratletud.
Edasi on oluline mõista, et globaalne ruum põhifaili ja sisse toodud .gitlab-ci.yml jaoks on ühine. Ja see fail, kuhu sisse tuuakse, omab prioriteeti.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster