Как ссылаться на переменные из нескольких заданий?

# #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. Да, это то, чем я пользовался раньше ! ссылка была доступна. Однако я ищу решение для !ссылки, не используя расширения.