相关疑难解决方法(0)

根据运行时条件在 Azure Pipeline 中执行或不执行模板

我已经运行了 Azure Pipeline。现在,我想仅当运行时某个条件成立时才执行一系列步骤。

例子

steps:
  - template: steps_checkout.yml
  # some more steps here

  - bash: |
    if [ some condition ]; then 
      echo "##vso[task.setVariable variable=rebuild_lib]false"
      echo "Did set rebuild_lib to false"
     fi

  - if eq( variables.rebuild_lib, true) ):
    - template: steps_lib_build.yml
Run Code Online (Sandbox Code Playgroud)

该行if eq( variables.rebuild_lib, true) )不起作用,因为它不是正确的条件语法。我可以用

${{ if eq( parameters.something, true ) }}
Run Code Online (Sandbox Code Playgroud)

但这需要在运行时知道。根据https://learn.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops ,表达式也可以$[ if eq(variables.rebuild_lib), true]在运行时进行评估,但是使用这个,我得到

Unexpected value '$[ if eq( variables.rebuild_lib, true) ) ]'
Run Code Online (Sandbox Code Playgroud)

似乎 yml 不能在运行时以这种方式修改。

那么我如何决定在运行时使用模板呢?

我可以想象将变量作为参数传递给下一个模板adapter.yml。然后,该模板adapter.yml获取变量作为参数,并可以使用${{}}表达式,并再次使用下一个模板steps_lib_build.yml...但仅为此创建模板似乎不知何故...解决方法。

还使用类似的东西

- template: …
Run Code Online (Sandbox Code Playgroud)

azure-pipelines azure-pipelines-yaml

11
推荐指数
1
解决办法
4807
查看次数

Azure DevOps 构建变量 Build.Reason 是否可以在 YAML 模板编译时条件中使用?

我想要这样的东西:

  - ${{ if or(eq(parameters.RunTestsOnPRBuildOnly, false), eq(variables.Build.Reason, 'PullRequest')) }}:
      - template: ps-module-run-tests.yml
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为variables.Build.Reason是空的。有可能吗?

请注意,我知道如何修改ps-module-run-tests.yml模板以将我的愿望表达为运行时条件。换句话说,我知道如何实现这一点:

在此输入图像描述

我很好奇的是是否Build.Reason可以在编译时条件下使用,以便这些步骤甚至不会被渲染。从表面上看,这并没有固有的问题,因为该值在开始时就已知,但这取决于模板的编译时间。如果太早的话,那是不可能的,但我不知道这些细节。也许我做不到,因为我错过了一些东西。

那么,有可能吗?

azure-devops azure-pipelines azure-pipelines-yaml

5
推荐指数
1
解决办法
5171
查看次数