Променљиве у Гитлабу се могу поставити на неколико места:
- У подешавањима групе
- У подешавањима пројекта
- Унутар .гитлаб-ци.имл
У овом случају, променљиве у поставкама групе и пројекта могу да се подесе као „датотека“ или „обична променљива“ и означите поља за потврду „заштићена“ и „маска“.
Почнимо са једноставним наслеђивањем и постепено ће постати сложеније.
Коначна листа нивоа приоритета налази се на крају документа.
Наслеђивање са групама [извори]
Наслеђују се варијабле из група, с тим да што је група ближе пројекту, то је њена вредност важнија.
Групе са променљивим
.гитлаб-ци.имл
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
Резултат цевовода
$ echo $MSG
B
Да променљива није наведена у групи Б, тада бисмо видели вредност А.
Наслеђивање променљивих унутар .гитлаб-ци.имл [извори]
Овде је све прилично једноставно: можете поставити променљиву глобално или је можете преписати унутар посла.
Групе са променљивим
.гитлаб-ци.имл
Хајде сада да направимо 2 посла, у једном од њих ћемо експлицитно навести $МСГ.
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
- ехо са варсима:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Наслеђивање са групама и унутар .гитлаб-ци.имл [извори]
Покушајмо да комбинујемо претходна 2 примера. Групне променљиве имају предност над променљивим унутар .гитлаб-ци.имл.
Групе са променљивим
.гитлаб-ци.имл
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
- ехо са варсима:
$ echo $MSG Y Job succeeded
Наслеђивање са специфицирањем променљивих у подешавањима пројекта [извори]
Променљиве у подешавањима пројекта УВЕК имају највећи приоритет! А променљиве наведене у .гитлаб-ци.имл не играју никакву улогу.
Групе са променљивим
Групне варијабле имају нижи приоритет.
.гитлаб-ци.имл
Хајде да користимо датотеку из претходног примера. Овде опет постоје променљиве наведене унутар .гитлаб-ци.имл, али променљиве унутар група и даље имају предност над њима.
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
- ехо са варсима:
$ echo $MSG project-3 Job succeeded
Наслеђе са празном вредношћу [извори]
Празна вредност је такође вредност
Празна вредност није Нулл
Групе са променљивим
.гитлаб-ци.имл
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
- ехо са варсима:
$ echo $MSG Job succeeded
Наслеђивање са укључивањем и групама [извори]
Овде ћемо покушати да укључимо пројекат-2 у пројекат-3
Групе у овом случају имају приоритет.
Групе са променљивим
.гитлаб-ци.имл
И поставите променљиву глобално у .гитлаб-ци.имл
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
- ехо са варсима:
$ echo $MSG B Job succeeded
Наслеђивање са укључивањем [извори]
Овде ћемо покушати да укључимо пројекат-2 у пројекат-3.
Уз услов да: ни групе ни сам пројекат немају променљиве.
Групе са променљивим
.гитлаб-ци.имл
Исто као у претходном примеру
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
- ехо са варсима:
$ echo $MSG Custom in job .gitlab-ci.yml Job succeeded
Резултати су следећи приоритети:
- Променљиве у подешавањима пројекта
- Променљиве у групама
- Променљиве строго наведене унутар послова (укључујући укључене датотеке)
- Глобалне променљиве унутар .гитлаб-ци.имл
- Глобалне варијабле унутар укључених датотека
Закључак
Најнеочигледнија ствар је да правило „што је променљива ближа коду, то је важнија“ прво ради за групе, а затим исто правило за променљиве унутар .гитлаб-ци.имл, али само под условом да променљиве у групама нису наведене .
Следеће, важно је схватити да је глобални простор за главни и укључени .гитлаб-ци.имл уобичајен. А приоритет има датотека у којој се јавља укључивање.
Извор: ввв.хабр.цом