Gitlab-CI ortam değişkenlerini nasıl devralır?

Gitlab'daki değişkenler birkaç yerde ayarlanabilir:

  1. Grup ayarlarında
  2. Proje ayarlarında
  3. .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.

Gitlab-CI ortam değişkenlerini nasıl devralır?

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 ortam değişkenlerini nasıl devralır?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Ardışık düzen sonucu

$ echo $MSG
B

Eğ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 ortam değişkenlerini nasıl devralır?

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

Ardışı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 ortam değişkenlerini nasıl devralır?

.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

Ardışı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 ortam değişkenlerini nasıl devralır?

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

Ardışı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 ortam değişkenlerini nasıl devralır?

.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

Ardışı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 ortam değişkenlerini nasıl devralır?

.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 ortam değişkenlerini nasıl devralır?

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

  1. Proje ayarlarındaki değişkenler
  2. Gruplardaki değişkenler
  3. İşlerin içinde kesin olarak belirtilen değişkenler (dahil edilen dosyalar dahil)
  4. .gitlab-ci.yml içindeki global değişkenler
  5. 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

Yorum ekle