متغیرها در Gitlab را می توان در چندین مکان تنظیم کرد:
- در تنظیمات گروه
- در تنظیمات پروژه
- داخل .gitlab-ci.yml
در این حالت، متغیرهای موجود در تنظیمات گروه و پروژه را میتوان بهعنوان «فایل» یا «متغیر معمولی» تنظیم کرد و چک باکسهای «محافظتشده» و «ماسک» را بررسی کرد.
بیایید با وراثت ساده شروع کنیم و به تدریج پیچیده تر می شود.
لیست نهایی سطوح اولویت را می توان در انتهای سند یافت.
ارث با گروه ها [منابع]
متغیرهای گروه ها به ارث می رسند، با این قانون که هر چه گروه به پروژه نزدیک تر باشد، ارزش آن مهم تر است.
گروه های دارای متغیر
.gitlab-ci.yml
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
نتیجه خط لوله
$ echo $MSG
B
اگر متغیر در گروه B مشخص نشده بود، مقدار A را می دیدیم.
به ارث بردن متغیرها در gitlab-ci.yml [منابع]
همه چیز در اینجا بسیار ساده است: می توانید یک متغیر را به صورت سراسری تنظیم کنید، یا می توانید آن را در داخل کار بازنویسی کنید.
گروه های دارای متغیر
.gitlab-ci.yml
بیایید اکنون 2 شغل ایجاد کنیم، در یکی از آنها به صراحت $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
نتیجه خط لوله
- پژواک:
$ echo $MSG Custom in global .gitlab-ci.yml Job succeeded
- پژواک با vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
ارث با گروه و داخل .gitlab-ci.yml [منابع]
بیایید سعی کنیم 2 مثال قبلی را با هم ترکیب کنیم. متغیرهای گروه بر متغیرهای داخل .gitlab-ci.yml اولویت دارند.
گروه های دارای متغیر
.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
نتیجه خط لوله
- پژواک:
$ echo $MSG Y Job succeeded
- پژواک با vars:
$ echo $MSG Y Job succeeded
ارث بری با تعیین متغیرها در تنظیمات پروژه [منابع]
متغیرها در تنظیمات پروژه همیشه بالاترین اولویت را دارند! و متغیرهای مشخص شده در داخل .gitlab-ci.yml هیچ نقشی ندارند.
گروه های دارای متغیر
متغیرهای گروه اولویت کمتری دارند.
.gitlab-ci.yml
بیایید از فایل مثال قبلی استفاده کنیم. در اینجا دوباره متغیرهایی در داخل .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
نتیجه خط لوله
- پژواک:
$ echo $MSG project-3 Job succeeded
- پژواک با vars:
$ echo $MSG project-3 Job succeeded
ارث با ارزش خالی [منابع]
یک مقدار خالی نیز یک مقدار است
یک مقدار خالی Null نیست
گروه های دارای متغیر
.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
نتیجه خط لوله
- پژواک:
$ echo $MSG Job succeeded
- پژواک با vars:
$ echo $MSG Job succeeded
ارث با شامل و گروه ها [منابع]
در اینجا سعی خواهیم کرد پروژه-2 را در پروژه-3 قرار دهیم
گروه ها در این مورد اولویت دارند.
گروه های دارای متغیر
.gitlab-ci.yml
و متغیر را به صورت سراسری در 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'
نتیجه خط لوله
- پژواک:
$ echo $MSG B Job succeeded
- پژواک با vars:
$ echo $MSG B Job succeeded
ارث با شامل [منابع]
در اینجا سعی خواهیم کرد پروژه-2 را در پروژه-3 قرار دهیم.
با این شرط که: نه گروه ها و نه خود پروژه هیچ متغیری ندارند.
گروه های دارای متغیر
.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'
نتیجه خط لوله
- پژواک:
$ echo $MSG With include .gitlab-ci.yml Job succeeded
- پژواک با vars:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
نتایج به شرح زیر است اولویت های:
- متغیرها در تنظیمات پروژه
- متغیرها در گروه ها
- متغیرهایی که به شدت در داخل کارها مشخص شده اند (از جمله فایل های موجود)
- متغیرهای سراسری در gitlab-ci.yml
- متغیرهای سراسری در داخل فایلهای شامل
نتیجه
واضح ترین نکته این است که قاعده "هر چه یک متغیر به کد نزدیک تر باشد، مهم تر است" ابتدا برای گروه ها کار می کند، و سپس همان قانون برای متغیرهای داخل .gitlab-ci.yml، اما فقط تحت شرط که متغیرها در گروه ها مشخص نشده اند.
در مرحله بعد، یک نکته مهم درک این موضوع است که فضای جهانی برای gitlab-ci.yml اصلی و شامل آن مشترک است. و فایلی که در آن inclusion رخ می دهد دارای اولویت است.
منبع: www.habr.com