# #gitlab-ci
Вопрос:
Следующие данные отображаются без ошибок во встроенной корпии CI:
.setup:
variables:
key1: val1
key2: val2
my-job:
variables: !reference [.setup, variables]
script:
- echo hello
Но что, если вы хотите ссылаться на переменные из нескольких заданий?
Следующее не подтверждено CI lint и не будет выполнено:
.setup:
variables:
key1: val1
key2: val2
.setup2:
variables:
key3: val3
key4: val4
my-job:
variables:
!reference [.setup, variables]
!reference [.setup2, variables]
script:
- echo hello
Ответ №1:
Я совершенно уверен, что сейчас невозможно ссылаться на то, как вы хотите, потому что это указывает «запись переменных» на «запись переменной». Или от «переменной» к «переменной». Ссылка выглядит как типизированный указатель. И делая какой-то тест, я получаю в нем какой-то хаш.
Но, может быть, вы могли бы сделать что-то подобное ? Объявите переменные как объединяющую строку, а затем разверните ее позже (может быть сценарий «до»).
.setup1:
variables:
array: "key1=val1;key2=val2"
.setup2:
variables:
array: "key3=val3;key4=val4"
my-job:
stage: build
variables:
setup1vars: !reference [.setup1, variables, array]
setup2vars: !reference [.setup2, variables, array]
script:
- export $(echo $setup1vars | tr ; \n | while read line ; do echo $line; done | xargs)
- export $(echo $setup2vars | tr ; \n | while read line ; do echo $line; done | xargs)
- echo "key1=$key1"
- echo "key2=$key2"
- echo "key3=$key3"
- echo "key4=$key4"
Я признаю, что это довольно искусственно.
Уродливый обходной путь
Ответ №2:
Вы пробовали расширить ключевое слово ?
https://docs.gitlab.com/ee/ci/yaml/#extends Это своего рода наследование, у вас может быть множественное наследование. Некоторые свойства будут заменены, но все переменные будут взяты из всех расширенных заданий. (если несколько переменных имеют одинаковое имя, будет взята последняя переменная из последнего расширения)
.setup:
variables:
key1: val1
key2: val2
.setup2:
variables:
key3: val3
key4: val4
my-job:
extends:
- .setup
- .setup2
script:
- echo hello
Комментарии:
1. Да, это то, чем я пользовался раньше ! ссылка была доступна. Однако я ищу решение для !ссылки, не используя расширения.