Я использую конвейер сборки Azure для создания приложения DotNet.
До сих пор этот конвейер сборки был настроен для сборки в режиме выпуска.
Я хочу выбрать конфигурацию сборки в зависимости от ветки, на которую была нажата фиксация:
develop
ветвь →Release
режим- ветвь функций → режим
Debug
Я также хочу переопределить это поведение благодаря параметру, который я могу выбрать перед запуском сборки вручную.
Вот диаграмма, чтобы показать, что я хотел бы:
И вот соответствующий YAML моего конвейера сборки и моей попытки:
parameters:
- name: buildConfiguration
displayName: Build Configuration
default: Default
values:
- Default
- Release
- Debug
variables:
- name: runsOnDevelop
value: ${{ eq( variables['Build.SourceBranch'], 'refs/heads/develop') }}
- name: defaultConfigurationSelected
value: ${{ eq(parameters['buildConfiguration'], 'Default') }}
- name: releaseConfigurationSelected
value: ${{ eq(parameters['buildConfiguration'], 'Release') }}
- name: buildForRelease
value: ${{ or(and( variables.runsOnDevelop, variables.defaultConfigurationSelected), variables.releaseConfigurationSelected )}}
#value: $[ or(and( variables.runsOnDevelop, variables.defaultConfigurationSelected), variables.releaseConfigurationSelected )] # same result
- name: buildConfiguration
${{ if variables.buildForRelease }}: # Conditional insertion: https://docs.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#conditional-insertion
value: 'Release'
${{ if not(variables.buildForRelease) }}:
value: 'Debug'
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: 'env | sort'
- task: DotNetCoreCLI@2
displayName: 'Build (${{ variables.buildConfiguration }})'
condition:
inputs:
command: build
arguments: '--configuration ${{ variables.buildConfiguration }} -p:Version=$(Version)'
- task: DotNetCoreCLI@2
displayName: 'Run Tests'
inputs:
command: test
arguments: '--configuration ${{ variables.buildConfiguration }}'
Вывод env | inline
показывает, что buildConfiguration
всегда равно Release
, даже если я заменю длинное выражение, присвоенное buildForRelease
, на ${{ false }}
или false
.
Я подозреваю, что переменная оценивается как строка, а не логическое значение, поэтому and( variables.runsOnDevelop, variables.defaultConfigurationSelected)
возвращает значение true.
Заранее спасибо.
РЕДАКТИРОВАТЬ: я пробовал со следующим синтаксисом, не повезло:
- name: buildForRelease
value: ${{ or(
and(
eq(variables.runsOnDevelop, True),
eq(variables.defaultConfigurationSelected, True)
),
eq(variables.debugConfigurationSelected, True)
) }}
- name: buildConfiguration
${{ if eq(variables.buildForRelease, True) }}:
value: 'Release'
${{ if ne(variables.buildForRelease, True) }}:
value: 'Debug'