Использовать переменную времени выполнения для имени репозитория при оформлении заказа в Azure Pipelines

У меня есть матрица в многоступенчатом конвейере, которая генерирует задания, которые нужно пройти и проверить в разных репозиториях git и совершить коммиты.

Матрица имеет имя репо в качестве значения, и я хочу сослаться на это во время задачи checkout. Однако я продолжаю получать ошибки из-за того, что переменная оценивается во время выполнения.

то есть матрица

matrix:
  repo_foo:
    repo: foo
  repo_bar:
    repo: bar

и я хочу сделать что-то вроде

steps:
- checkout: $[ variables['repo'] ]

но они не оцениваются и выдают ошибку перед запуском конвейера. Точно так же использование ${{ variables['repo'] }} также не работает, потому что оно оценивается во время компиляции и, таким образом, становится пустой строкой.

Я определил потенциальные репозитории как ресурсы в конвейере yaml, а также попытался передать полный путь git в качестве значения переменной.

Есть ли другой способ сделать это?


person user105189    schedule 09.07.2020    source источник
comment
Не получаете ответа в течение нескольких дней, не могли бы вы поделиться последней информацией по этой проблеме? Если у вас есть какие-либо опасения, не стесняйтесь поделиться ими здесь.   -  person Hugh Lin    schedule 15.07.2020


Ответы (2)


Согласно тесту, синтаксис переменной не должен поддерживаться на этапе оформления заказа.

Если вы используете переменные для ссылки на репо на этапе оформления заказа, то при запуске конвейера вы получите следующую ошибку:

введите описание изображения здесь

steps:
- checkout: self | none | repository name # self represents the repo where the initial Pipelines YAML file was found

Вы можете обратиться к этому официальному документ.

person Hugh Lin    schedule 10.07.2020
comment
Есть ли дизайнерская / техническая причина, по которой мы не можем? У нас есть стратегия развертывания на основе GitOps, при которой мы проверяем несколько разных репозиториев git для обновления тегов изображений и генерируем манифест выпуска, который передаем в качестве матрицы. Поскольку матричные переменные определяются во время выполнения, мы не можем динамически создавать задания на основе репозиториев в этом манифесте. В идеале я мог бы проверить переменную, которая разрешается в имя репо во время выполнения, ИЛИ определение задания могло бы использовать матричную переменную для определения условия. - person user105189; 16.07.2020
comment
Я надеялся сделать то же самое здесь, и похоже, что ограничение может быть связано с тем, как DevOps отслеживает конкретную версию репо +, связанную со сборкой. Если эта информация не известна до тех пор, пока конвейер не запущен, возможно, это станет более сложным отслеживанием. Хотя было бы очень полезно получить эту поддержку. - person Charlie; 12.02.2021
comment
Переменные можно использовать на этапе оформления заказа. Посмотрите здесь stackoverflow.com/a/65004899/5853218 - person Mihai Albert; 18.03.2021

Вы можете получить связанный ресурс, вызвав команду git clone для значения переменной матрицы.

person starian chen-MSFT    schedule 13.07.2020
comment
Я попытался выполнить клон git в задаче bash, но при этом получил ошибки учетных данных. - person user105189; 16.07.2020
comment
@ user105189 Вы можете указать учетные данные в URL: например: git clone test: $ (system.accesstoken) @ dev.azure.com / starain09 /. Примечание. Вам необходимо предоставить учетной записи службы сборки разрешение на чтение для целевого репозитория. Вы можете обратиться к этой статье: Запускать команды Git в скрипте. - person starian chen-MSFT; 17.07.2020