Variabel di Gitlab dapat diatur di beberapa tempat:
- Dalam pengaturan grup
- Dalam pengaturan proyek
- 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".
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
.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
.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
.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.
.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
.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
.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
.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:
- Variabel dalam pengaturan proyek
- Variabel dalam kelompok
- Variabel yang ditentukan secara ketat di dalam pekerjaan (termasuk file yang disertakan)
- Variabel global di dalam .gitlab-ci.yml
- 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