У меня есть сценарий, в котором мне нужно иметь оба:
параметры времени выполнения , чтобы конвейер можно было запускать вручную из пользовательского интерфейса, когда пользователи запускают он может выбирать из предопределенного набора параметров (определенных в YAML)
переменных , так что конвейер может быть вызван через API REST
Что касается параметров времени выполнения, я смог создать следующий пример конвейера:
parameters:
- name: image
displayName: Pool Image
type: string
default: ubuntu-latest
values:
- windows-latest
- ubuntu-latest
trigger: none
stages:
- stage: A
jobs:
- job: A
steps:
- pwsh: |
echo "This should be triggering against image: $MY_IMAGE_NAME"
env:
MY_IMAGE_NAME: ${{ parameters.image }}
Когда я его запускаю, я вижу раскрывающийся список, в котором я могу выбрать имя изображения, и оно отражено в выходном сообщении скрипта PowerShell.
Что касается переменных, я определил здесь одну из них под названием «изображение» (обратите внимание, что значение пусто):
Идея сейчас это вызвать конвейер из API REST и заменить имя изображения значением, полученным из переменной:
{
"definition": {
"id": 1
},
"sourceBranch": "master",
"parameters": "{\"image\": \"windows-latest\" }"
}
Чтобы шаг напечатал значение, которое я передаю здесь, мне нужно исправить переменная окружения в некотором роде. Я думал, что было бы достаточно написать что-то вроде:
env:
MY_IMAGE_NAME: ${{ coalesce(variables.image, parameters.image) }}
Это потому, что я хочу отдавать приоритет переменным, а затем параметрам, чтобы в случае, если ничего не указано, у меня всегда было значение по умолчанию трубопровод может использовать.
Однако этот подход не работает, возможно, потому что мы имеем дело с разным временем раскрытия для переменных, но я не знаю, что мне следует писать вместо этого (если есть жизнеспособный вариант, конечно).
Я также попробовал:
env:
MY_IMAGE_NAME: ${{ coalesce($(image), parameters.image) }}
MY_IMAGE_NAME: ${{ coalesce('$(image)', parameters.image) }}
MY_IMAGE_NAME: $[ coalesce(variables.image, parameters.image) ]
MY_IMAGE_NAME: $[ coalesce($(image), parameters.image) ]
Ни один из них не работает, поэтому я подозреваю, что это может быть неосуществимым вообще.
В настоящее время я думаю об обходном пути, заключающемся в создании двух разных конвейеров, чтобы их можно было запускать независимо, но в то же время мне довольно просто выполнить sh, учитывая, что я ' Я использую много шаблонов, я не нахожу правильный способ продолжить, поэтому я открыт для любых предложений.