...
pipelinesascode.tekton.dev/task: "git-clone" (1)
...
Pipelines as Code 解析器确保正在运行的管道运行不会与其他运行冲突。
要拆分您的管道和管道运行,请将文件存储在.tekton/
目录或其子目录中。
如果 Pipelines as Code 观察到一个管道运行引用了位于.tekton/
目录中的任何 YAML 文件中的任务或管道,Pipelines as Code 会自动解析引用的任务,以提供一个具有嵌入式规范的单个管道运行PipelineRun
对象。
如果 Pipelines as Code 无法解析Pipeline
或PipelineSpec
定义中的引用的任务,则在将任何更改应用于集群之前运行将失败。您可以在 Git 提供商平台上以及目标命名空间(Repository
CR 所在的位置)的事件中看到此问题。
如果观察到以下类型的任务,解析器将跳过解析
任务或管道包。
API 版本没有tekton.dev/
前缀的自定义任务。
解析器按字面意思使用这些任务,无需任何转换。
要在发送拉取请求之前在本地测试您的管道运行,请使用tkn pac resolve
命令。
您还可以引用远程管道和任务。
Pipelines as Code 支持通过在管道运行中使用注释来获取远程任务或管道。如果您在管道运行中引用远程任务,或者在PipelineRun
或PipelineSpec
对象中引用管道,Pipelines as Code 解析器会自动将其包含在内。如果在获取远程任务或解析远程任务时出现任何错误,Pipelines as Code 将停止处理任务。
要包含远程任务,请参考以下注释示例
引用 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 版本。 |
...
pipelinesascode.tekton.dev/task: "<https://remote.url/task.yaml>" (1)
...
1 | 远程任务的公共 URL。
|
...
pipelinesascode.tekton.dev/task: "<share/tasks/git-clone.yaml>" (1)
...
1 | 包含任务定义的本地文件的相对路径。 |
您可以使用远程管道注释在多个存储库之间共享管道定义。
...
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
的任务替换为您定义的任务。