5.4. 将事件与管道运行匹配的注解
您可以使用管道运行上的注解将不同的 Git 供应商事件与每个管道运行匹配。如果有多个管道与事件匹配,Pipelines as Code 会并行运行它们,并在管道运行完成后马上将结果发送到 Git 供应商。
5.4.1. 将拉取请求事件与管道运行匹配 复制链接链接已复制到粘贴板!
您可以使用以下示例将 pipeline-pr-main
管道运行与以 main
分支为目标的 pull_request
事件匹配:
- 1
- 您可以通过添加以逗号分隔的条目来指定多个分支。例如:
"[main, release-nightly]"
。另外,您可以指定以下项目:-
对分支的完整引用,如
"refs/heads/main"
-
带有模式匹配的 globs,如
"refs/heads/\ the"
-
标签,如
"refs/tags/1.\*"
-
对分支的完整引用,如
5.4.2. 将推送事件与管道运行匹配 复制链接链接已复制到粘贴板!
您可以使用以下示例将 pipeline-push-on-main
管道运行与以 refs/heads/main
分支为目标的 push
事件匹配:
- 1
- 您可以通过添加以逗号分隔的条目来指定多个分支。例如:
"[main, release-nightly]"
。另外,您可以指定以下项目:-
对分支的完整引用,如
"refs/heads/main"
-
带有模式匹配的 globs,如
"refs/heads/\ the"
-
标签,如
"refs/tags/1.\*"
-
对分支的完整引用,如
5.4.3. 将注释事件与管道运行匹配 复制链接链接已复制到粘贴板!
将注释事件与管道运行匹配只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
当注释的文本与 ^/merge-pr
正则表达式匹配时,您可以使用以下示例匹配管道运行的 pipeline-comment
管道:
只有在注释作者满足以下要求之一时才启动管道运行:
- 作者是存储库的所有者。
- 作者是存储库的合作者。
- 作者是存储库机构中的公共成员。
-
注释作者在存储库根目录的
OWNERS
文件的approvers
或reviewers
部分中列出,如 Kubernetes 文档所述。Pipelines as Code 支持OWNERS
和OWNERS_ALIASES
文件的规格。如果OWNERS
文件包含一个 filters 部分,Pipelines as Code 会匹配 approvers,并使用 reviewers 仅针对198.51.100.0/24
过滤器。
5.4.4. 高级事件匹配 复制链接链接已复制到粘贴板!
Pipelines as Code 支持在高级事件匹配中使用基于通用表达式语言 (CEL) 的过滤。如果您在管道运行中有 pipelinesascode.tekton.dev/on-cel-expression
注解,PPipelines as Code 使用 CEL 表达式并跳过 on-target-branch
注解。与简单的 on-target-branch
注解匹配相比,CEL 表达式允许复杂的过滤和负效果。
如果您在作为 on-event
、on-target-branch
、on-label
、on-path-change
或 on-path-change-ignore
注解运行的管道中的 on-cel-expression
注解中使用 on-cel-expression
注解,则 Pipelines 作为代码会忽略其他注解。
要将基于 CEL 的过滤作为代码使用,请考虑以下注解示例:
匹配以
main
分支为目标并来自wip
分支的pull_request
事件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要仅在路径更改时运行管道,您可以使用带有 glob 模式的
.pathChanged
后缀功能:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 匹配
docs
目录中的所有 markdown 文件。
匹配以标题
[DOWNSTREAM]
开头的所有拉取请求:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在
pull_request
事件上运行管道,但跳过experimental
分支:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于使用 Pipelines as Code 时进行基于 CEL 的高级过滤,您可以使用以下字段和后缀功能:
-
event
: 一个push
或pull_request
事件。 -
target_branch
:目标分支。 -
source_branch
: 一个pull_request
事件的源分支。对于push
事件,它与target_branch
相同。 -
event_title
:匹配事件的标题,如一个push
事件的提交标题,以及pull_request
事件的 pull 或 merge 请求的标题。目前,只有 GitHub、Gitlab 和 Bitbucket 云是受支持的提供程序。 -
.pathChanged
:字符串的后缀函数。如果路径已改变,字符串可以是一个路径的 glob。目前,只支持 GitHub 和 Gitlab。
另外,您还可以访问 Git 存储库供应商传递的完整有效负载。使用 headers
字段访问有效负载的标头,如 headers['x-github-event']
。使用 body
字段访问有效负载的正文,如 body.pull_request.state
。
使用带有 Pipelines as Code 的基于 CEL 的过滤的有效负载的标头和正文只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
在以下示例中,只有在以下条件都为 true 时,管道运行才会启动:
-
拉取请求以
main
分支为目标。 -
拉取请求的作者是
超级用户
。 -
操作是
synchronize
;此操作会在拉取请求上执行更新时触发。
如果您使用 标头
或 正文
字段进行事件匹配,您可能无法使用 Git 命令(如 retest
)触发管道运行。如果使用 Git 命令,则有效负载正文是包含此命令的注释,而不是原始有效负载。
如果要在使用 body
字段进行事件匹配时再次运行管道,您可以关闭并重新打开拉取请求或合并请求,或者添加新的 SHA 提交。您可以使用以下命令添加新的 SHA 提交:
git commit --amend --no-edit && git push --force-with-lease
git commit --amend --no-edit && git push --force-with-lease