web-dev-qa-db-ja.com

Azureパイプラインで条件付き変数の割り当てを実行できますか?

Azure Pipelinesには ExpressionsConditions がありますが、条件に基づいて2つの値の1つを variable に割り当てる方法が見つかりません。

この疑似コードが何をするかを達成する方法はありますか?

    ${{ if endsWith( variables['Build.SourceBranchName'], '/master' ) }}: 
      buildVersion: variables['mavenVersion']
    ${{ else }}: 
      buildVersion: variables['Build.SourceBranchName']
9
Mike Murray

これでうまくいくはずです...

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'

非マスターブランチは、mavenVersionである「refs/heads/branch_name」を出力します non-master branches prints 'refs/heads/branch_name' which is mavenVersion

マスターブランチはmavenVersionである1.0を出力します master branch prints 1.0 which is mavenVersion

4

思ったより近かった。これはきれいではありませんが、うまくいきました。 (より多くの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
10
Mike Murray

@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

それほどきれいではありませんが、最終的には動作します。