Bagaimana cara Gitlab-CI mewarisi variabel lingkungan?

Variabel di Gitlab dapat diatur di beberapa tempat:

  1. Dalam pengaturan grup
  2. Dalam pengaturan proyek
  3. Di dalam .gitlab-ci.yml

Dalam hal ini, variabel dalam pengaturan grup dan proyek dapat ditetapkan sebagai "file" atau "variabel reguler" dan centang kotak "dilindungi" dan "mask".

Bagaimana cara Gitlab-CI mewarisi variabel lingkungan?

Mari kita mulai dengan pewarisan sederhana dan secara bertahap akan menjadi lebih kompleks.

Daftar akhir dari tingkat prioritas dapat ditemukan di akhir dokumen.

Warisan dengan kelompok [sumber]

Variabel dari grup diwariskan, dengan aturan bahwa semakin dekat lokasi grup dengan proyek, semakin penting nilainya.

Grup dengan variabel

Bagaimana cara Gitlab-CI mewarisi variabel lingkungan?

.gitlab-ci.yml

image: busybox:latest
variables:
  GIT_STRATEGY: none

echo:
  stage: test
  script:
    - echo $MSG

Hasil saluran pipa

$ echo $MSG
B

Jika variabel tersebut tidak ditentukan dalam kelompok B, maka kita akan melihat nilai A.

Mewarisi variabel di dalam .gitlab-ci.yml [sumber]

Semuanya cukup sederhana di sini: Anda dapat mengatur variabel secara global, atau Anda dapat menimpanya di dalam pekerjaan.

Grup dengan variabel

Bagaimana cara Gitlab-CI mewarisi variabel lingkungan?

.gitlab-ci.yml

Sekarang mari kita buat 2 pekerjaan, salah satunya kita akan secara eksplisit menunjukkan $MSG.

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

Hasil saluran pipa

  • gema:
    $ echo $MSG
    Custom in global .gitlab-ci.yml
    Job succeeded
  • gema dengan vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Warisan dengan grup dan di dalam .gitlab-ci.yml [sumber]

Mari kita coba menggabungkan 2 contoh sebelumnya. Variabel grup lebih diutamakan daripada variabel di dalam .gitlab-ci.yml.

Grup dengan variabel

Bagaimana cara Gitlab-CI mewarisi variabel lingkungan?

.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

Hasil saluran pipa

  • gema:
    $ echo $MSG
    Y
    Job succeeded
  • gema dengan vars:
    $ echo $MSG
    Y
    Job succeeded

Warisan dengan menentukan variabel dalam pengaturan proyek [sumber]

Variabel dalam pengaturan proyek SELALU memiliki prioritas tertinggi! Dan variabel yang ditentukan di dalam .gitlab-ci.yml tidak memainkan peran apa pun.

Grup dengan variabel

Variabel grup memiliki prioritas lebih rendah.
Bagaimana cara Gitlab-CI mewarisi variabel lingkungan?

.gitlab-ci.yml

Mari gunakan file dari contoh sebelumnya. Di sini sekali lagi ada variabel yang ditentukan di dalam .gitlab-ci.yml, tetapi variabel di dalam grup tetap diutamakan.

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

Hasil saluran pipa

  • gema:
    $ echo $MSG
    project-3
    Job succeeded
  • gema dengan vars:
    $ echo $MSG
    project-3
    Job succeeded

Warisan dengan nilai kosong [sumber]

Nilai kosong juga merupakan nilai
Nilai kosong bukan Null

Grup dengan variabel

Bagaimana cara Gitlab-CI mewarisi variabel lingkungan?

.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

Hasil saluran pipa

  • gema:
    $ echo $MSG
    Job succeeded
  • gema dengan vars:
    $ echo $MSG
    Job succeeded

Warisan dengan include dan groups [sumber]

Disini kami akan mencoba memasukkan proyek-2 ke dalam proyek-3
Kelompok dalam hal ini mempunyai prioritas.

Grup dengan variabel

Bagaimana cara Gitlab-CI mewarisi variabel lingkungan?

.gitlab-ci.yml

Dan atur variabel secara global di .gitlab-ci.yml

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

Hasil saluran pipa

  • gema:
    $ echo $MSG
    B
    Job succeeded
  • gema dengan vars:
    $ echo $MSG
    B
    Job succeeded

Warisan dengan menyertakan [sumber]

Disini kami akan mencoba memasukkan proyek-2 ke dalam proyek-3.
Dengan syarat: baik kelompok maupun proyek itu sendiri tidak mempunyai variabel apapun.

Grup dengan variabel

Bagaimana cara Gitlab-CI mewarisi variabel lingkungan?

.gitlab-ci.yml

Sama seperti pada contoh sebelumnya

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

Hasil saluran pipa

  • gema:
    $ echo $MSG
    With include .gitlab-ci.yml
    Job succeeded
  • gema dengan vars:
    $ echo $MSG
    Custom in job .gitlab-ci.yml
    Job succeeded

Hasilnya adalah sebagai berikut prioritas:

  1. Variabel dalam pengaturan proyek
  2. Variabel dalam kelompok
  3. Variabel yang ditentukan secara ketat di dalam pekerjaan (termasuk file yang disertakan)
  4. Variabel global di dalam .gitlab-ci.yml
  5. Variabel global di dalam file yang disertakan

Kesimpulan

Hal yang paling tidak jelas adalah bahwa aturan "semakin dekat suatu variabel dengan kode, semakin penting variabel tersebut" berfungsi terlebih dahulu untuk grup, dan kemudian aturan yang sama untuk variabel di dalam .gitlab-ci.yml, tetapi hanya dengan syarat bahwa variabel dalam kelompok tidak ditentukan.
Selanjutnya, poin penting adalah memahami bahwa ruang global untuk .gitlab-ci.yml utama dan yang disertakan adalah hal yang umum. Dan file tempat penyertaan terjadi memiliki prioritas.

Sumber: www.habr.com

Tambah komentar