第 6 章 管理管道运行
使用 Pipelines as Code,您可以在代码存储库中创建管道并运行这些管道。
6.1. 使用 Pipelines as Code 创建管道运行 复制链接链接已复制到粘贴板!
要使用 Pipelines as Code 运行管道,您可以在存储库的 .tekton/ 目录中创建管道定义或模板作为 YAML 文件。您可以使用远程 URL 在其他存储库中引用 YAML 文件,但管道运行仅由包含 .tekton/ 目录中的事件触发。
Pipelines as Code 解析器会将所有任务与管道运行绑定,作为一个单独的管道运行,而无需外部依赖项。
-
对于管道,使用最少一个带有 spec 的管道,或一个独立的
Pipeline对象。 - 对于任务,在管道中嵌入任务 spec,或者将其单独定义为一个 Task 对象。
参数化提交和 URL
您可以使用 {{<var>}} 的格式来使用动态的、可扩展的参数,在您的提交中指定参数。目前,您可以使用以下变量:
-
{{repo_owner}}: 存储库所有者。 -
{{repo_name}}: 存储库名称。 -
{{repo_url}}:存储库完整 URL。 -
{{revision}}:提交的完全 SHA 修订。 -
{{sender}}:提交发送者的用户名或帐户 ID。 -
{{source_branch}}:事件源自的分支名称。 -
{{target_branch}}:事件目标的分支名称。对于推送事件,它与source_branch相同。 -
{{pull_request_number}}:拉取或合并请求号,仅对pull_request事件类型定义。 -
{{git_auth_secret}}:使用 Git 提供程序的令牌自动生成的 secret 名称,用于签出私有存储库。
将事件与管道运行匹配
您可以通过在管道运行中使用特殊注解,将不同的 Git 供应商事件与每个管道匹配。如果有多个管道与事件匹配,Pipelines as Code 会并行运行它们,并在管道运行完成后将结果发送到 Git 供应商。
将 pull 事件与管道运行匹配
您可以使用以下示例将 pipeline-pr-main 管道与以 main 分支为目标的 pull_request 事件匹配:
- 1
- 您可以通过添加以逗号分隔的条目来指定多个分支。例如:
"[main, release-nightly]"。另外,您可以指定以下内容:-
对分支的完整引用,如
"refs/heads/main" -
带有模式匹配的 globs,如
"refs/heads/\ the" -
标签,如
"refs/tags/1.\*"
-
对分支的完整引用,如
将推送事件与管道运行匹配
您可以使用以下示例将 pipeline-push-on-main 管道与以 refs/heads/main 分支为目标的 push 事件匹配:
- 1
- 您可以通过添加以逗号分隔的条目来指定多个分支。例如:
"[main, release-nightly]"。另外,您可以指定以下内容:-
对分支的完整引用,如
"refs/heads/main" -
带有模式匹配的 globs,如
"refs/heads/\ the" -
标签,如
"refs/tags/1.\*"
-
对分支的完整引用,如
高级事件匹配
Pipelines as Code 支持在高级事件匹配中使用基于通用表达式语言 (CEL) 的过滤。如果您在管道运行中有 pipelinesascode.tekton.dev/on-cel-expression 注解,PPipelines as Code 使用 CEL 表达式并跳过 on-target-branch 注解。与简单的 on-target-branch 注解匹配相比,CEL 表达式允许复杂的过滤和负效果。
要将基于 CEL 的过滤作为代码使用,请考虑以下注解示例:
匹配以
main分支为目标并来自wip分支的pull_request事件:... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && target_branch == "main" && source_branch == "wip" ...... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && target_branch == "main" && source_branch == "wip" ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要仅在路径更改时运行管道,您可以使用带有 glob 模式的
.pathChanged后缀功能:... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && "docs/\*.md".pathChanged() ...... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && "docs/\*.md".pathChanged()1 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 匹配
docs目录中的所有 markdown 文件。
匹配以标题
[DOWNSTREAM]开头的所有拉取请求:... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request && event_title.startsWith("[DOWNSTREAM]") ...... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request && event_title.startsWith("[DOWNSTREAM]") ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在
pull_request事件上运行管道,但跳过experimental分支:... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && target_branch != experimental" ...... pipelinesascode.tekton.dev/on-cel-expression: | event == "pull_request" && target_branch != 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。
使用临时 GitHub App 令牌用于 Github API 操作
您可以使用来自 GitHub App 的 Pipelines as Code 生成的临时安装令牌来访问 GitHub API。令牌值存储在为私有存储库生成的临时 {{git_auth_secret}} 动态变量的 git-provider-token 键中。
例如,要在拉取请求中添加注释,您可以使用 Tekton Hub 中的 github-add-comment 任务使用 Pipelines as Code 注解:
... pipelinesascode.tekton.dev/task: "github-add-comment" ...
...
pipelinesascode.tekton.dev/task: "github-add-comment"
...
然后,您可以在 tasks 部分添加任务,或管道运行定义中的 finally 任务:
- 1
- 通过使用动态变量,您可以为来自任何存储库的任何拉取请求重复使用此片断模板。
在 GitHub 应用程序中,生成的安装令牌的有效期为 8 小时,其范围限制于事件源自于集群中配置的存储库。
其他资源