Gitlab'daki değişkenler birkaç yerde ayarlanabilir:
- Grup ayarlarında
- Proje ayarlarında
- .gitlab-ci.yml'nin içi
Bu durumda grup ve proje ayarlarındaki değişkenler “dosya” veya “düzenli değişken” olarak ayarlanabilir ve “korumalı” ve “maske” onay kutuları işaretlenebilir.

Basit kalıtımla başlayalım ve giderek daha karmaşık hale gelecektir.
Öncelik seviyelerinin son listesi belgenin sonunda bulunabilir.
Gruplarla miras [kaynaklar]
Gruplardaki değişkenler devralınır; kural olarak grup projeye ne kadar yakınsa değeri de o kadar önemlidir.
Değişkenli gruplar

.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSGArdışık düzen sonucu
$ echo $MSG
BEğer değişken B grubunda belirtilmeseydi A değerini görecektik.
.gitlab-ci.yml içindeki değişkenleri devralma [kaynaklar]
Burada her şey oldukça basit: global olarak bir değişken ayarlayabilir veya işin içinde onun üzerine yazabilirsiniz.
Değişkenli gruplar

.gitlab-ci.yml
Şimdi 2 iş oluşturalım, bunlardan birinde açıkça $MSG'yi belirteceğiz.
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 $MSGArdışık düzen sonucu
- Eko:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded - değişkenlerle yankı:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Gruplarla ve .gitlab-ci.yml içinde kalıtım [kaynaklar]
Önceki 2 örneği birleştirmeye çalışalım. Grup değişkenleri .gitlab-ci.yml içindeki değişkenlere göre önceliklidir.
Değişkenli gruplar

.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 $MSGArdışık düzen sonucu
- Eko:
$ echo $MSG Y Job succeeded - değişkenlerle yankı:
$ echo $MSG Y Job succeeded
Proje ayarlarında değişkenlerin belirtilmesiyle kalıtım [kaynaklar]
Proje ayarlarındaki değişkenler HER ZAMAN en yüksek önceliğe sahiptir! Ve .gitlab-ci.yml dosyasında belirtilen değişkenler herhangi bir rol oynamaz.
Değişkenli gruplar
Grup değişkenleri daha düşük önceliğe sahiptir.

.gitlab-ci.yml
Önceki örnekteki dosyayı kullanalım. Burada da yine .gitlab-ci.yml dosyasında belirtilen değişkenler var, ancak grupların içindeki değişkenler yine de onlara göre önceliklidir.
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 $MSGArdışık düzen sonucu
- Eko:
$ echo $MSG project-3 Job succeeded - değişkenlerle yankı:
$ echo $MSG project-3 Job succeeded
Boş değerli miras [kaynaklar]
Boş bir değer aynı zamanda bir değerdir
Boş bir değer Null değildir
Değişkenli gruplar

.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 $MSGArdışık düzen sonucu
- Eko:
$ echo $MSG Job succeeded - değişkenlerle yankı:
$ echo $MSG Job succeeded
Dahil etme ve gruplarla miras [kaynaklar]
Burada proje-2'ü proje-3'ye dahil etmeye çalışacağız
Bu durumda grupların önceliği vardır.
Değişkenli gruplar

.gitlab-ci.yml
Ve değişkeni genel olarak .gitlab-ci.yml dosyasında ayarlayın
variables:
MSG: "With include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'Ardışık düzen sonucu
- Eko:
$ echo $MSG B Job succeeded - değişkenlerle yankı:
$ echo $MSG B Job succeeded
Dahil edilen miras [kaynaklar]
Burada proje-2'ü proje-3'ye dahil etmeye çalışacağız.
Şu şartla: ne grupların ne de projenin kendisinin herhangi bir değişkeni yoktur.
Değişkenli gruplar

.gitlab-ci.yml
Önceki örnektekiyle aynı
variables:
MSG: "With include .gitlab-ci.yml"
include:
- project: how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
file: '.gitlab-ci.yml'Ardışık düzen sonucu
- Eko:
$ echo $MSG With include .gitlab-ci.yml Job succeeded - değişkenlerle yankı:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Sonuçlar aşağıdaki gibidir öncelikler:
- Proje ayarlarındaki değişkenler
- Gruplardaki değişkenler
- İşlerin içinde kesin olarak belirtilen değişkenler (dahil edilen dosyalar dahil)
- .gitlab-ci.yml içindeki global değişkenler
- Dahil edilen dosyaların içindeki genel değişkenler
Sonuç
En belirgin olmayan nokta, "bir değişken koda ne kadar yakınsa o kadar önemlidir" kuralının önce gruplar için, ardından aynı kuralın .gitlab-ci.yml içindeki değişkenler için de işe yaramasıdır, ancak yalnızca şu koşul altında: gruplardaki değişkenlerin belirtilmemiş olması.
Daha sonra önemli bir nokta, ana ve dahil edilen .gitlab-ci.yml için global alanın ortak olduğunu anlamaktır. Ve dahil edilmenin gerçekleştiği dosyanın önceliği vardır.
Kaynak: habr.com
