Azure DevOps Yaml管道中“步骤”内定义的模板的条件执行

bbuxkriu  于 2023-08-07  发布在  其他
关注(0)|答案(2)|浏览(127)

此查询与Azure DevOps YAML管道有关。是否可以在“步骤”中定义的任何模板上放置执行条件?

For ex

1.基于任何管道变量值(动态,在管道运行期间传递),决定是否执行“Task-1.yml”
1.根据shell脚本中定义的任何变量值(使用##vso[task.setvariable variable=name]$value),决定是否执行'Task-3.yml'
下面是Azure devops yaml管道结构:

stages:
- stage: Stage-A
  jobs:
  - job: Job-A
    steps:
      - template : Task-1.yml
      - template : Task-2.yml
      - template : Task-3.yml

字符串
我能够在作业级别执行此操作,但是我不能将管道结构更改为具有1个以上的作业,因为我需要所有任务都在管道运行时分配的同一构建代理上执行。
我做了很多的打击和审判,以实现这一点,但不知何故,这是不为我工作。
救命啊!

bt1cpqcv

bt1cpqcv1#

不能为管道应用运行时条件。唯一的方法是使用模板表达式${{ }},但这是在编译时计算的。
你可以在这里找到这些细节
在模板表达式中,您可以访问包含传入参数值的parameters上下文。此外,您还可以访问变量上下文,其中包含YAML文件中指定的所有变量以及许多预定义变量(在该文章中的每个变量上都有说明)。重要的是,它没有运行时变量,比如那些存储在管道中的变量,或者在开始运行时给出的变量。模板扩展发生在运行的早期,因此这些变量不可用。

gj3fmq9x

gj3fmq9x2#

我这样做的方式是将条件传递给模板,如下所示:

stages:
- stage: Stage-A
  jobs:
  - job: Job-A
    steps:
      - template : Task-1.yml
        parameters:
          condition: ${{ yourConditionHere }} # such as "and(succeeded())"
      - template : Task-2.yml
      - template : Task-3.yml

字符串
然后在模板中使用它,如下所示:

parameters:
  - name:  condition
    type: string

steps:
  - task: PowerShell@2
    displayName: "Task name"
    inputs:
      targetType: "inline"
      script: |
        Write-Host "Hello world"
    condition: ${{ parameters.condition }}

相关问题