Cum moștenește Gitlab-CI variabilele de mediu?

Variabilele în Gitlab pot fi definite în mai multe locuri:

  1. În setările grupului
  2. În setările proiectului
  3. În interiorul .gitlab-ci.yml

În plus, variabilele din setările grupului și ale proiectului pot fi definite ca "fișier" sau "variabilă obișnuită" și pot avea bifate opțiunile "protejat" și "mascat".

Cum moștenește Gitlab-CI variabilele de mediu?

Vom începe cu moștenirea simplă și vom complica treptat.

Lista finală a nivelurilor de priorități poate fi consultată la sfârșitul documentului.

Moștenirea cu grupurile [izvoare]

Variabilele din grupuri sunt moștenite, cu regula că cu cât grupul este mai aproape de proiect, cu atât valoarea sa este mai importantă.

Grupuri cu variabile

Cum moștenește Gitlab-CI variabilele de mediu?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Rezultatul pipeline-ului

$ echo $MSG
B

Dacă variabila nu ar fi fost specificată în grupul B, am fi văzut valoarea A.

Moștenirea variabilelor în interiorul .gitlab-ci.yml [izvoare]

Aici totul este destul de simplu: poți defini o variabilă globală sau o poți suprascrie în interiorul jobului.

Grupuri cu variabile

Cum moștenește Gitlab-CI variabilele de mediu?

.gitlab-ci.yml

Acum vom crea 2 joburi, în unul dintre ele vom specifica clar $MSG.

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Personalizat în global .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo cu variabile:
  stage: test
  variables:
    MSG: "Personalizat în job .gitlab-ci.yml"
  script:
    - echo $MSG

Rezultatul pipeline-ului

  • echo:
    $ echo $MSG
    Personalizat în global .gitlab-ci.yml
    Job reușit
  • echo cu variabile:
    $ echo $MSG
    Personalizat în job .gitlab-ci.yml
    Job reușit

Moștenirea cu grupuri și în interiorul .gitlab-ci.yml [izvoare]

Să încercăm să combinăm cele două exemple anterioare. Variabilele din grupuri au prioritate în fața variabilelor din interiorul .gitlab-ci.yml.

Grupuri cu variabile

Cum moștenește Gitlab-CI variabilele de mediu?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Personalizat în global .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo cu variabile:
  stage: test
  variables:
    MSG: "Personalizat în job .gitlab-ci.yml"
  script:
    - echo $MSG

Rezultatul pipeline-ului

  • echo:
    $ echo $MSG
    Y
    Job reușit
  • echo cu variabile:
    $ echo $MSG
    Y
    Job reușit

Moștenirea cu specificarea variabilelor în setările proiectului [izvoare]

Variabilele din setările proiectului au întotdeauna prioritate maximă! Iar variabilele specificate în interiorul .gitlab-ci.yml nu au nicio relevanță.

Grupuri cu variabile

Variabilele grupurilor au o prioritate mai mică.
Cum moștenește Gitlab-CI variabilele de mediu?

.gitlab-ci.yml

Să folosim fișierul din exemplul anterior. Aici din nou există variabile specificate în interiorul .gitlab-ci.yml, dar variabilele din grupuri au totuși prioritate față de acestea.

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Personalizat în global .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo cu variabile:
  stage: test
  variables:
    MSG: "Personalizat în job .gitlab-ci.yml"
  script:
    - echo $MSG

Rezultatul pipeline-ului

  • echo:
    $ echo $MSG
    project-3
    Job reușit
  • echo cu variabile:
    $ echo $MSG
    project-3
    Job reușit

Moștenirea cu valoare goală [izvoare]

O valoare goală este de asemenea o valoare
O valoare goală nu este Null

Grupuri cu variabile

Cum moștenește Gitlab-CI variabilele de mediu?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none
  MSG: "Personalizat în global .gitlab-ci.yml"

echo:
  stage: test
  script:
    - echo $MSG

echo cu variabile:
  stage: test
  variables:
    MSG: "Personalizat în job .gitlab-ci.yml"
  script:
    - echo $MSG

Rezultatul pipeline-ului

  • echo:
    $ echo $MSG
    Job reușit
  • echo cu variabile:
    $ echo $MSG
    Job reușit

Moștenirea cu inclusiuni și grupuri [izvoare]

Aici vom încerca să includem project-3 în project-2
Grupurile au prioritate în acest caz.

Grupuri cu variabile

Cum moștenește Gitlab-CI variabilele de mediu?

.gitlab-ci.yml

Și să definim o variabilă globală în .gitlab-ci.yml

variables:
 MSG: "Cu include .gitlab-ci.yml"
include:
 - project: cum-este-gitlab-ci-inherit-variabile-de-mediu/z/y/project-3
   file: '.gitlab-ci.yml'

Rezultatul pipeline-ului

  • echo:
    $ echo $MSG
    B
    Job reușit
  • echo cu variabile:
    $ echo $MSG
    B
    Job reușit

Moștenirea cu inclusiuni [izvoare]

Aici vom încerca să includem project-3 în project-2.
Cu condiția că: nici grupurile, nici projektul nu au variabile.

Grupuri cu variabile

Cum moștenește Gitlab-CI variabilele de mediu?

.gitlab-ci.yml

Exact ca în exemplul anterior.

variables:
 MSG: "Cu include .gitlab-ci.yml"
include:
 - project: cum-este-gitlab-ci-inherit-variabile-de-mediu/z/y/project-3
   file: '.gitlab-ci.yml'

Rezultatul pipeline-ului

  • echo:
    $ echo $MSG
    Cu include .gitlab-ci.yml
    Job s-a încheiat cu succes.
  • echo cu variabile:
    $ echo $MSG
    Personalizat în job .gitlab-ci.yml
    Job reușit

Se obțin următoarele: priorități:

  1. Variabile în setările proiectului
  2. Variabile în grupuri
  3. Variabile strict specificate în interiorul jobului (inclusiv fișierele incluse)
  4. Variabile globale în interiorul .gitlab-ci.yml
  5. Variabile globale în interiorul fișierelor incluse

Concluzie

Cel mai puțin evident este că regula „cu cât variabila este mai aproape de cod, cu atât este mai importantă” funcționează mai întâi pentru grupuri și apoi aceeași regulă se aplică și pentru variabilele din .gitlab-ci.yml, dar doar cu condiția ca variabilele din grupuri să nu fie definite.
Un alt aspect important este înțelegerea faptului că spațiul global pentru principalele și incluse .gitlab-ci.yml este comun. Fișierul în care se face includerea are prioritate.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster