У меня есть требование запускать конвейер, когда в ADO создается запрос на извлечение, и когда запущенный конвейер достигает успеха, будет обработано слияние (с использованием политик ветвей). значением по умолчанию для параметра среды является NONPROD, но при автоматическом срабатывании конвейера я хочу выбрать другую среду на основе целевой ветки, например NFT для разработки и PROD для основной.
Я попытался с помощью приведенного ниже кода установить переменную и попробовал условный параметр с предопределенной переменной ['System.PullRequest.targetBranchName'], но похоже, что я могу видеть ожидаемую целевую ветвь на выходе, но условие не выполняется.
variables:
- name: mode
value: 'apply'
- name: environment
${{ if eq( variables['System.PullRequest.targetBranchName'], 'main' ) }} :
value: 'PROD'
${{ if eq( variables['System.PullRequest.targetBranchName'], 'develop' ) }} :
value: 'NFT'
${{ else }}:
value: 'NONPROD'
Ниже приведен этап, на котором я пытаюсь проверить значения.
stages:
- stage: setprerequisites
displayName: "setprerequisites"
jobs:
- job: checkvariables
displayName: "check variables"
steps:
- script: |
echo "source working directory --> $(System.DefaultWorkingDirectory)"
echo "selected default environmentparameter --> ${{ parameters.environment }}"
echo "selected environment from variables --> $(environment)"
echo "target branch --> $(System.PullRequest.targetBranchName)"
echo "selected terraform mode to apply --> ${{ parameters.mode }}"
echo "terraform ${{ parameters.mode }} will be applied on $(environment) environment"
Ниже приведен вывод:
заранее спасибо
Согласно предопределенным переменным , переменная System.PullRequest.targetBranchName
недоступна в шаблонах, поэтому следующее не будет работать:
${{ if eq( variables['System.PullRequest.targetBranchName'], 'main' ) }}
Вместо этого вы должны использовать синтаксис макроса $(var)
или выражение времени выполнения $[variables.var]
.
Установка выходной переменной конвейера с именем ENVIRONMENT
и отображение ее в консоли:
trigger: none
stages:
- stage: setprerequisites
displayName: "setprerequisites"
jobs:
- job: checkvariables
displayName: "check variables"
steps:
- script: |
TARGET_BRANCH='$(System.PullRequest.targetBranchName)'
if [ $TARGET_BRANCH == "main" ]; then
echo "Found branch 'main', setting the environment to PROD"
echo "##vso[task.setvariable variable=ENVIRONMENT;isOutput=true]PROD"
elif [ $TARGET_BRANCH == "develop" ]; then
echo "Found branch 'develop', setting the environment to NFT"
echo "##vso[task.setvariable variable=ENVIRONMENT;isOutput=true]NFT"
else
echo "Couldn't find branches 'main' nor 'develop'. Setting the environment to NONPROD"
echo "##vso[task.setvariable variable=ENVIRONMENT;isOutput=true]NONPROD"
fi
displayName: "Set environment"
name: SetEnvironment
- script: |
echo "selected environment from variables --> $(SetEnvironment.environment)"
displayName: Check variables
Запуск конвейера как часть запроса на включение (целевая ветка: разработка):
Запуск конвейера вручную:
Обратите внимание, что $(SetEnvironment.environment)
— это правильный синтаксис для использования выходной переменной в других задачах в рамках того же задания.
Чтобы узнать, как использовать переменную на другом задании/этапе, обратитесь к разделу Уровни выходных переменных.