- PVSM.RU - https://www.pvsm.ru -
При этом переменные в настройках групп и проекта можно задать как "файл"или "обычную переменную" и поставить галочки "защищено" и "маскировать".
Начнем с простого наследования и будет постепенно усложняться.
С конечным списком уровней приоритетов можно ознакомиться в конце документа.
Переменные из групп наследуются, с тем правилом, что чем ближе группа расположена к проекту тем ее значение важнее.
image: busybox:latest
variables:
GIT_STRATEGY: none
echo:
stage: test
script:
- echo $MSG
$ echo $MSG
B
Если бы переменная не была указана в группе B, то мы бы увидели значение А.
Здесь все довольно просто: можно задать глобально переменную, а можно перезаписать ее внутри джобы.
Создадим теперь 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:
$ echo $MSG
Custom in global .gitlab-ci.yml
Job succeeded
echo with vars:
$ echo $MSG
Custom in job .gitlab-ci.yml
Job succeeded
Попробуем объединить предыдущие 2 примера. Переменные групп в приоритете перед переменными внутри .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:
$ echo $MSG
Y
Job succeeded
echo with vars:
$ echo $MSG
Y
Job succeeded
Переменные в настройках проекта имеют ВСЕГДА наивысший приоритет! И переменные, указанные внутри .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:
$ echo $MSG
project-3
Job succeeded
echo with vars:
$ echo $MSG
project-3
Job succeeded
Пустое значение – это тоже значение
Пустое значение – это не Null
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:
$ echo $MSG
Job succeeded
echo with vars:
$ echo $MSG
Job succeeded
Здесь попробуем в project-2 заинклюдить project-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:
$ echo $MSG
B
Job succeeded
echo with vars:
$ echo $MSG
B
Job succeeded
Здесь попробуем в project-2 заинклюдить project-3.
C условием что: ни группы, ни сам проект не имеют никаких переменных.
Такой же как в предыдущем примере
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:
$ echo $MSG
With include .gitlab-ci.yml
Job succeeded
echo with vars:
$ echo $MSG
Custom in job .gitlab-ci.yml
Job succeeded
Самым не очевидным моментом является, что правило "чем ближе переменная к коду, тем она главнее" работает сначала для групп, а затем такое же правило и для переменных внутри .gitlab-ci.yml, но только с условием что переменные в группах не заданны.
Далее важным местом является понимание того, что глобальное пространство для основного и заинклюденного .gitlab-ci.yml – общее. И тот файл в который происходит инклюд имеет приоритет.
Автор: Дмитрий Жиляев
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/git/348888
Ссылки в тексте:
[1] [исходники]: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/a/b/project-8
[2] .gitlab-ci.yml: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/a/b/project-8/-/blob/master/.gitlab-ci.yml
[3] Результат пайлайна: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/a/b/project-8/-/jobs/460514261
[4] [исходники]: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/d/project-4
[5] Результат пайлайна: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/d/project-4/pipelines/123507496
[6] [исходники]: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/z/y/project-1
[7] Результат пайлайна: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/z/y/project-1/pipelines/123486449
[8] [исходники]: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/z/y/project-3
[9] Результат пайлайна: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/z/y/project-3/pipelines/123583808
[10] [исходники]: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/z/y/project-5
[11] Результат пайлайна: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/z/y/project-5/pipelines/123503127
[12] .gitlab-ci.yml: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/d/project-6/-/blob/master/.gitlab-ci.yml
[13] Результат пайлайна: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/a/b/project-2/pipelines/123509948
[14] [исходники]: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/d/project-6
[15] Результат пайлайна: https://gitlab.com/how-is-gitlab-ci-inherit-environment-variables/d/project-6/pipelines/123509858
[16] Источник: https://habr.com/ru/post/491490/?utm_source=habrahabr&utm_medium=rss&utm_campaign=491490
Нажмите здесь для печати.