Azure Devops yml管道if else条件与变量

lav*_*zer 3 azure-devops azure-pipelines-yaml

我正在尝试将 Azure Devops yml 管道中的 if else 条件与变量组一起使用。我正在尝试按照最新的 Azure Devops yaml pipeline build 来实现它

以下是我的场景中 if else 条件的示例代码。test 是 my-global 变量组内的变量。

variables:
  - group: my-global
  - name: fileName
    ${{ if eq(variables['test'], 'true') }}:
      value: 'product.js'
    ${{ elseif eq(variables['test'], false) }}:
      value: 'productCost.js'

jobs:
  - job:
    steps:
      - bash:
          echo test variable value $(fileName)
Run Code Online (Sandbox Code Playgroud)

当执行上面的代码时,在 echo 语句中我们看不到文件名的任何值,即它为空,这意味着上面的 if else 条件都没有被执行,但是当我使用以下条件测试 if else 条件时。

  - name: fileName
    ${{ if eq('true', 'true') }}:
       value: 'product.js'

Run Code Online (Sandbox Code Playgroud)

文件名确实回显了正确的值,即product.js。所以我的结论是我无法正确引用变量组中的变量。因此,任何建议都会有所帮助并受到赞赏。谢谢!

Tej*_*ndi 5

我能够使用一些肮脏的解决方法来实现目标,但我确实同意使用参数会是更好的方法,除非三元运算符可用于 Azure DevOps YAML 管道。

问题是这${{ if condition }}:是编译时表达式,因此变量组下的变量不可用。

我能够使用运行时表达式$[<expression>]

参考:https://learn.microsoft.com/en-us/azure/devops/pipelines/process/expressions? view=azure-devops

我的管道:

trigger:
  - none

variables:
  - group: Temp-group-for-testing
  - name: fileName
    value: $[replace(replace('True',eq(variables['test'], 'True'), 'value1'),'True','value2')]

stages:
  - stage: test
    jobs: 
     - job: testvar
       continueOnError: false
       steps: 
         - bash: echo $(fileName)
           displayName: "echo variable"
Run Code Online (Sandbox Code Playgroud)

结果可在github上获取