×

关于 Pipelines as Code 解析器

要拆分您的管道和管道运行,请将文件存储在.tekton/目录或其子目录中。

如果 Pipelines as Code 观察到一个管道运行引用了位于.tekton/目录中的任何 YAML 文件中的任务或管道,Pipelines as Code 会自动解析引用的任务,以提供一个具有嵌入式规范的单个管道运行PipelineRun对象。

如果 Pipelines as Code 无法解析PipelinePipelineSpec定义中的引用的任务,则在将任何更改应用于集群之前运行将失败。您可以在 Git 提供商平台上以及目标命名空间(Repository CR 所在的位置)的事件中看到此问题。

如果观察到以下类型的任务,解析器将跳过解析

  • 任务或管道包。

  • API 版本没有tekton.dev/前缀的自定义任务。

解析器按字面意思使用这些任务,无需任何转换。

要在发送拉取请求之前在本地测试您的管道运行,请使用tkn pac resolve命令。

您还可以引用远程管道和任务。

将远程任务注释与 Pipelines as Code 一起使用

Pipelines as Code 支持通过在管道运行中使用注释来获取远程任务或管道。如果您在管道运行中引用远程任务,或者在PipelineRunPipelineSpec对象中引用管道,Pipelines as Code 解析器会自动将其包含在内。如果在获取远程任务或解析远程任务时出现任何错误,Pipelines as Code 将停止处理任务。

要包含远程任务,请参考以下注释示例

引用 Tekton Hub 中的远程任务
  • 引用 Tekton Hub 中的单个远程任务。

    ...
      pipelinesascode.tekton.dev/task: "git-clone" (1)
    ...
    1 Pipelines as Code 包含来自 Tekton Hub 的最新版本的任务。
  • 引用 Tekton Hub 中的多个远程任务

    ...
      pipelinesascode.tekton.dev/task: "[git-clone, golang-test, tkn]"
    ...
  • 使用-<NUMBER>后缀引用 Tekton Hub 中的多个远程任务。

    ...
      pipelinesascode.tekton.dev/task: "git-clone"
      pipelinesascode.tekton.dev/task-1: "golang-test"
      pipelinesascode.tekton.dev/task-2: "tkn" (1)
    ...
    1 默认情况下,Pipelines as Code 将字符串解释为要从 Tekton Hub 获取的最新任务。
  • 引用 Tekton Hub 中远程任务的特定版本。

    ...
      pipelinesascode.tekton.dev/task: "[git-clone:0.1]" (1)
    ...
    1 引用 Tekton Hub 中git-clone远程任务的0.1版本。
使用 URL 的远程任务
...
  pipelinesascode.tekton.dev/task: "<https://remote.url/task.yaml>" (1)
...
1 远程任务的公共 URL。
从存储库内的 YAML 文件引用任务
...
pipelinesascode.tekton.dev/task: "<share/tasks/git-clone.yaml>" (1)
...
1 包含任务定义的本地文件的相对路径。

使用 Pipelines as Code 的远程管道注释

您可以使用远程管道注释在多个存储库之间共享管道定义。

...
    pipelinesascode.tekton.dev/pipeline: "<https://git.provider/raw/pipeline.yaml>" (1)
...
1 远程管道定义的 URL。您也可以提供同一存储库内文件的路径。

您只能使用注释引用一个管道定义。

覆盖远程管道中的任务

默认情况下,如果您在管道运行中使用远程管道注释,Pipelines as Code 将使用远程管道中的所有任务。

您可以通过向管道运行添加任务注释来覆盖远程管道中的任务。添加的任务必须与远程管道中的任务名称相同。

例如,您可以使用以下管道运行定义

引用远程管道并覆盖任务的示例管道运行定义
apiVersion: tekton.dev/v1
kind: PipelineRun
metadata:
  annotations:
    pipelinesascode.tekton.dev/pipeline: "https://git.provider/raw/pipeline.yaml"
    pipelinesascode.tekton.dev/task: "./my-git-clone-task.yaml"

在此示例中,假设在 https://git.provider/raw/pipeline.yaml 中找到的远程任务包含一个名为 git-clone 的任务,并且 my-git-clone-task.yaml 文件定义的任务也名为 git-clone

在这种情况下,管道运行将执行远程管道,但会将管道中名为 git-clone 的任务替换为您定义的任务。