第 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 事件匹配:

...
  metadata:
    name: pipeline-pr-main
  annotations:
    pipelinesascode.tekton.dev/on-target-branch: "[main]" 
1

    pipelinesascode.tekton.dev/on-event: "[pull_request]"
...
Copy to Clipboard Toggle word wrap
1
您可以通过添加以逗号分隔的条目来指定多个分支。例如:"[main, release-nightly]"。另外,您可以指定以下内容:
  • 对分支的完整引用,如 "refs/heads/main"
  • 带有模式匹配的 globs,如 "refs/heads/\ the"
  • 标签,如 "refs/tags/1.\*"

将推送事件与管道运行匹配

您可以使用以下示例将 pipeline-push-on-main 管道与以 refs/heads/main 分支为目标的 push 事件匹配:

...
  metadata:
    name: pipeline-push-on-main
  annotations:
    pipelinesascode.tekton.dev/on-target-branch: "[refs/heads/main]" 
1

    pipelinesascode.tekton.dev/on-event: "[push]"
...
Copy to Clipboard Toggle word wrap
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"
    ...
    Copy to Clipboard Toggle word wrap
  • 要仅在路径更改时运行管道,您可以使用带有 glob 模式的 .pathChanged 后缀功能:

    ...
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request" && "docs/\*.md".pathChanged() 
    1
    
    ...
    Copy to Clipboard Toggle word wrap
    1
    匹配 docs 目录中的所有 markdown 文件。
  • 匹配以标题 [DOWNSTREAM] 开头的所有拉取请求:

    ...
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request && event_title.startsWith("[DOWNSTREAM]")
    ...
    Copy to Clipboard Toggle word wrap
  • 要在 pull_request 事件上运行管道,但跳过 experimental 分支:

    ...
      pipelinesascode.tekton.dev/on-cel-expression: |
        event == "pull_request" && target_branch != experimental"
    ...
    Copy to Clipboard Toggle word wrap

对于使用 Pipelines as Code 时进行基于 CEL 的高级过滤,您可以使用以下字段和后缀功能:

  • event: 一个 pushpull_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"
...
Copy to Clipboard Toggle word wrap

然后,您可以在 tasks 部分添加任务,或管道运行定义中的 finally 任务:

[...]
tasks:
  - name:
      taskRef:
        name: github-add-comment
      params:
        - name: REQUEST_URL
          value: "{{ repo_url }}/pull/{{ pull_request_number }}" 
1

        - name: COMMENT_OR_FILE
          value: "Pipelines as Code IS GREAT!"
        - name: GITHUB_TOKEN_SECRET_NAME
          value: "{{ git_auth_secret }}"
        - name: GITHUB_TOKEN_SECRET_KEY
          value: "git-provider-token"
...
Copy to Clipboard Toggle word wrap
1
通过使用动态变量,您可以为来自任何存储库的任何拉取请求重复使用此片断模板。
注意

在 GitHub 应用程序中,生成的安装令牌的有效期为 8 小时,其范围限制于事件源自于集群中配置的存储库。

其他资源

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat