Azure devops 条件变量赋值可以在Azure管道中完成吗?

Azure devops 条件变量赋值可以在Azure管道中完成吗?,azure-devops,yaml,azure-pipelines,Azure Devops,Yaml,Azure Pipelines,Azure管道有和,但我无法根据条件将两个值中的一个分配给 有什么方法可以实现这个伪代码的功能吗 ${{ if endsWith( variables['Build.SourceBranchName'], '/master' ) }}: buildVersion: variables['mavenVersion'] ${{ else }}: buildVersion: variables['Build.SourceBranchName'] 这应该能奏

Azure管道有和,但我无法根据条件将两个值中的一个分配给

有什么方法可以实现这个伪代码的功能吗

    ${{ 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'
非主分支打印“refs/heads/
branch\u name
”,即mavenVersion

主分支打印1.0,即mavenVersion
我比我想象的要近。这并不漂亮,但它奏效了。(有更多yaml上下文)


@迈克·默里,谢谢你!多年来我一直在努力解决这个问题。 从拉请求触发生成时,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

虽然不太漂亮,但最终还是可以使用。

作为@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

谢谢这是一个很好的答案,我将来可能会使用这种解决方案。我忽略了提到我需要使用这个变量来构造构建运行名,所以我需要在运行任何步骤之前使用这个变量。名称:$(buildKey)$(buildNum)#构建运行名称您可能有两个具有分支触发器的构建。一个带有include,另一个带有exclude。不确定这是否是您想要的..我发布的代码(位于管道的变量部分)解决了我需要使用变量来定义管道的构建运行名称的问题。谢谢。您好,我正在学习您的示例,我遇到了一个错误,如
意外值'env'
,它是我用来赋值的变量。我想这是因为我把它和变量组一起使用,所以我不能像现在这样使用这个例子。你有这个IF-ELSE表达式(?)参考url,我可以参考我的案例吗?我在原始帖子中包含的三个文档链接是我能找到的与这个主题相关的所有链接。没有“其他”,所以你需要链接“如果”。不同的变量类型需要不同的语法。查一下这个部分,谢谢。最后我从模板部分找到了。我试图不使用模板来简化,所以不知道是否有解释。这不起作用。如图所示,
System.PullRequest
(除了
IsFork
)中的所有内容在模板syntaxHello中都不可用!此语法在Azure的在线编辑器中为我提供了一个
意外属性${{if..}
。无论如何,当我保存文件并点击
验证
/
运行
按钮时,我会看到一个弹出窗口,指示
已经定义了“值”
不管怎样,我的两个条件被评估为true,因此验证/运行时会出现错误。在线编辑器仍然给我警告,但这不是什么大问题。@Hellium您是如何修复的
“值”已经定义了
?我也在使用
eq
ne
,我不明白它们是如何计算为真的。在我的例子中,条件比这个答案的条件更复杂,我搞混了。我已经修改了条件,使它们相互排斥。你的情况怎么样?非常感谢!我们正试图弄清楚这一点:如何使用带有名称-值语法的条件。
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