Azure DevOps - 使用参数在 yaml 管道定义中设置路径触发器
Posted
技术标签:
【中文标题】Azure DevOps - 使用参数在 yaml 管道定义中设置路径触发器【英文标题】:Azure DevOps - Use parameter to set path trigger in yaml pipeline definition 【发布时间】:2022-01-17 18:08:25 【问题描述】:我想使用 yaml 模板设置 Azure 管道。我挣扎的是路径触发定义。我希望启动各个管道,前提是它们实际上与早期版本不同。
core.yaml
是一个通用模板,用于不同的项目。
parameters:
- name: projectPath
type: string
trigger:
branches:
include:
- master
- feature/*
paths:
include:
- $ parameters.projectPath # this is the problematic part
steps:
... # restore, build, test, etc tasks are defined here
build.yaml
文件是为每个项目定义的。它们仅在 core.yaml
上扩展并提供
所需参数:
extends:
template: core.yaml
parameters:
projectPath: src/project1
使用值$ parameters.projectPath
失败,因为“给定上下文中不允许模板表达式”。如果我用引号括起来也会发生同样的情况。
使用值$(parameters.projectPath)
有效,但即使我更改定义路径之外的文件也会触发。
我也尝试使用实际值而不是参数(例如“src/project1”),但它也会触发每次更改,即使我只触摸文件“src/project2/foo.md”。
我看到的示例没有在模板中使用触发器。但通常情况下,当我放错节点时触发管道(例如意外值)时会出现语法错误。所以这只是我的期望,它应该可以工作。
有什么建议吗?
【问题讨论】:
老实说,听起来你很清楚——你不能在那种情况下使用模板表达式。我想您需要将触发器放在每个单独的管道中,而不是放在模板中。 @VinceBowdren 正确,这也是我的结论,但我希望我只是忽略了一些东西。因为这样我需要将“触发器”块复制并粘贴到一堆 yaml 文件中,而不仅仅是将其添加到模板中。 【参考方案1】:这是不可能的,因为这部分
trigger:
branches:
include:
- master
- feature/*
paths:
include:
- $ parameters.projectPath # this is the problematic part
需要在编译时知道,但您提供在运行时评估的参数。
而$(parameters.projectPath)
这个语法没有任何意义,可能会被评估为空值,然后所有内容都包含在触发器中。
【讨论】:
我尝试使用实际值(而不是参数),但还是不行。以上是关于Azure DevOps - 使用参数在 yaml 管道定义中设置路径触发器的主要内容,如果未能解决你的问题,请参考以下文章
请参阅使用 YAML 管道在 Azure DevOps 中构建工件