Variabilele în Gitlab pot fi definite în mai multe locuri:
- În setările grupului
- În setările proiectului
- Î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".

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

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSGRezultatul pipeline-ului
$ echo $MSG
BDacă 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

.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 $MSGRezultatul 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

.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 $MSGRezultatul 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ă.

.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 $MSGRezultatul 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

.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 $MSGRezultatul 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

.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

.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:
- Variabile în setările proiectului
- Variabile în grupuri
- Variabile strict specificate în interiorul jobului (inclusiv fișierele incluse)
- Variabile globale în interiorul .gitlab-ci.yml
- 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
