Azure Pipelines has Expressions and Conditions, but I can find no way to assign one of two values to a variable, based on a condition.
Is there any way to accomplish what this pseudo-code would?
${{ if endsWith( variables['Build.SourceBranchName'], '/master' ) }}:
buildVersion: variables['mavenVersion']
${{ else }}:
buildVersion: variables['Build.SourceBranchName']
This should do the trick....
BuildVersion is initialised as $(Build.SourceBranch)
if it's the master branch you change that to the $(mavenVersion)
else no change.
variables:
mavenVersion: '1.0'
buildVersion: $(Build.SourceBranch)
pool:
vmImage: 'ubuntu-latest'
steps:
- script: echo '##vso[task.setvariable variable=buildVersion]$(mavenVersion)'
displayName: "Set the buildVersion as mavenVersion if the Build.SourceBranch = 'refs/heads/master' "
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master')
- script: echo $(buildVersion)
displayName: 'Printing the variable'
non-master branches prints 'refs/heads/branch_name
' which is mavenVersion
master branch prints 1.0 which is mavenVersion
I was closer than I thought. This is not pretty, but it worked. (with more yaml context)
variables:
${{ if eq( variables['Build.SourceBranchName'], 'master' ) }}:
buildVersion: ${{ variables['mavenVersion'] }}
${{ if ne( variables['Build.SourceBranchName'], 'master' ) }}:
buildVersion: ${{ variables['Build.SourceBranchName'] }}
buildKey: ${{ format('{0}_{1}', variables['supportReleaseNumber'], variables['buildVersion']) }}
buildNum: $[counter(variables['buildKey'], 1)] # same as $(Rev:r), but more widely usable
name: $(buildKey)_$(buildNum) # build run name
@Mike Murray, thank you for this! I have been trying to solve this for ages.
When builds are triggered from pull requests the SourceBranchName is always 'merge'. Your answer helped me come up with this solution for getting the target branch name for both scenarios, manual builds and builds triggered by pull-requests:
${{ if ne( variables['Build.SourceBranchName'], 'merge' ) }}:
environment: ${{ variables['Build.SourceBranchName'] }}
${{ if endsWith( variables['System.PullRequest.TargetBranch'], 'dev' ) }}:
environment: dev
${{ if endsWith( variables['System.PullRequest.TargetBranch'], 'staging' ) }}:
environment: staging
${{ if endsWith( variables['System.PullRequest.TargetBranch'], 'master' ) }}:
environment: prod
Not very pretty, but finally works.