可以在Azure管道中完成条件变量分配吗?

Mik*_*ray 4 yaml azure-devops

Azure Pipelines具有表达式条件,但是我找不到基于条件将两个值之一分配给变量的方法。

有什么办法可以完成这个伪代码吗?

    ${{ if endsWith( variables['Build.SourceBranchName'], '/master' ) }}: 
      buildVersion: variables['mavenVersion']
    ${{ else }}: 
      buildVersion: variables['Build.SourceBranchName']
Run Code Online (Sandbox Code Playgroud)

Eva*_*sky 28

作为@Mike Murray 答案的扩展,如果您使用变量组,则必须将其他变量定义为名称值对。在这种情况下使用条件变量赋值如下:

variables:
- group: 'my-variable-group'
- name: myfirstadditionalvariable
  value: 100
- name: myconditionalvariable
  ${{ if eq( variables['Build.SourceBranchName'], 'master' ) }}: 
    value: masterBranchValue
  ${{ if ne( variables['Build.SourceBranchName'], 'master' ) }}: 
    value: featureBranchValue
Run Code Online (Sandbox Code Playgroud)


Krz*_*tof 14

通过此更新,您的 YAML 有效:

    ${{ if endsWith( variables['Build.SourceBranchName'], '/master' ) }}: 
      buildVersion: variables['mavenVersion']
    ${{ else }}: 
      buildVersion: variables['Build.SourceBranchName']
Run Code Online (Sandbox Code Playgroud)

一切都很好用这个

    ${{ if endsWith( variables['Build.SourceBranchName'], '/master' ) }}: 
      buildVersion: variables['mavenVersion']
    ${{ else }}: 
      buildVersion: variables['Build.SourceBranchName']
Run Code Online (Sandbox Code Playgroud)

简单地Build.SourceBranchName包含只是大师。

Generating script.
========================== Starting Command Output ===========================
/usr/bin/bash --noprofile --norc /home/vsts/work/_temp/1121efc8-6445-4e19-be5a-8d525a76467e.sh
master
master
Finishing: Display buildVersion
Run Code Online (Sandbox Code Playgroud)

注意:这不适用于Azure DevOps Server - 请注意!感谢@psulek 强调这一点!


Ven*_*ala 9

这应该可以解决问题....

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'
Run Code Online (Sandbox Code Playgroud)

非主分支打印 'refs/heads/ branch_name' 这是 mavenVersion 非主分支打印 'refs/heads/branch_name' 这是 mavenVersion

master 分支打印 1.0,即 mavenVersion master 分支打印 1.0,即 mavenVersion


Mik*_*ray 6

我比我想像的要近。这虽然不漂亮,但确实有效。(具有更多的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
Run Code Online (Sandbox Code Playgroud)