【问题标题】:Execute or not template in Azure Pipeline with runtime condition使用运行时条件在 Azure Pipeline 中执行或不执行模板
【发布时间】:2021-05-30 09:45:13
【问题描述】:

我的 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

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

${{ if eq( parameters.something, true ) }}

但这需要在运行时知道。 根据https://docs.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) ) ]'

似乎无法在运行时以这种方式修改 yml。

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

我可以想象将变量作为参数提供给下一个模板 adapter.yml。这个模板adapter.yml然后将变量作为参数,可以使用${{}}表达式并再次使用下一个模板steps_lib_build.yml ...但仅为此创建模板似乎以某种方式...解决方法。

也使用类似的东西

- template: steps_lib_build.yml
  condition: ...

不工作。

有什么好办法吗?

【问题讨论】:

  • 这个问题怎么样?下面的答案是否解决了您的问题,如果是,您可以接受它作为答案,这样它可以帮助遇到同样问题的其他社区成员,我们可以存档这个帖子,谢谢。如果没有,请告诉我们您是否需要进一步的帮助。
  • 这个问题怎么样?如果您有任何更新,请告诉我。我的回答会对您有所帮助,请您接受它作为答案,这样它可以帮助遇到相同问题的其他社区成员,我们可以存档这个帖子,谢谢。

标签: azure-pipelines azure-pipelines-yaml


【解决方案1】:

在您当前的 yaml 中,您正在尝试使用 Parameters to select a template。但是根据文档:在运行时选择模板的参数,这仅在运行时使用。 所以在这里,我们可以使用job conditionsoutput variables来帮助我们将第二个yaml temp分开。

这是一个演示 yaml 示例来帮助您:

trigger: none

pool:
  vmImage: ubuntu-latest

jobs:
  - job: A
    steps:
    - task: Bash@3
      name: ProduceVar  # because we're going to depend on it, we need to name the step
      inputs:
        targetType: 'inline'
        script: 'echo "##vso[task.setVariable variable=rebuild_lib;isOutput=true]false"'
  - job: B
    condition: and(succeeded(), eq(dependencies.A.outputs['ProduceVar.rebuild_lib'], 'true'))
    dependsOn: A
    steps:
      # - script: echo Hello B
      - template: start.yaml

请注意:我们应该使用任务 Bash 来帮助我们设置输出变量,因为我们将依赖于任务名称。

【讨论】:

  • 感谢您的回答。就我而言,我需要对包含大量步骤但不是作业的模板执行相同的操作。我的问题是是否有办法运行整个模板......或者不。因此,您的回答在技术上是正确的,但不能解决我的问题:-).. 所以从我这边投票,但没有检查为已解决。
猜你喜欢
  • 2020-03-02
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 2022-01-16
  • 2021-08-11
  • 2018-12-25
  • 2022-08-04
  • 1970-01-01
相关资源
最近更新 更多