Azure Pipelinesには Expressions と Conditions がありますが、条件に基づいて2つの値の1つを variable に割り当てる方法が見つかりません。
この疑似コードが何をするかを達成する方法はありますか?
${{ if endsWith( variables['Build.SourceBranchName'], '/master' ) }}:
buildVersion: variables['mavenVersion']
${{ else }}:
buildVersion: variables['Build.SourceBranchName']
これでうまくいくはずです...
BuildVersionが$(Build.SourceBranch)として初期化されるのは、それがマスターブランチである場合は$(mavenVersion)に変更し、それ以外の場合は変更しません。
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'
思ったより近かった。これはきれいではありませんが、うまくいきました。 (より多くのyamlコンテキストを使用)
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、ありがとうございます!私はこれを長い間解決しようとしてきました。プルリクエストからビルドがトリガーされると、SourceBranchNameは常に「マージ」されます。あなたの答えは私が両方のシナリオ、手動ビルドおよびプルリクエストによってトリガーされるビルドのターゲットブランチ名を取得するためのこのソリューションを思い付くのに役立ちました:
${{ 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
それほどきれいではありませんが、最終的には動作します。