5.3. Pipelines as Code 解析器注解
您可以使用 Pipelines as Code 解析器注解来引用 Task
和 Pipeline
自定义资源(CR)定义。Pipelines as Code 解析器从注解中指定的位置获取定义。如果在获取远程任务或解析它们时出现错误,Pipelines as Code 将停止处理任务。
如果您在管道运行或 PipelineRun
或 PipelineSpec
对象中引用远程任务,Pipelines as Code 解析器会自动解析引用的资源,并将其包含在生成的 PipelineRun
自定义资源(CR)中。
5.3.1. 远程任务注解
要包含远程任务,请参阅以下注解示例:
引用 Tekton Hub 中的远程任务
在 Tekton Hub 中引用单个远程任务。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... pipelinesascode.tekton.dev/task: "git-clone" ...
... pipelinesascode.tekton.dev/task: "git-clone"
1 ...
- 1
- Pipelines as Code 包括来自 Tekton Hub 的任务的最新版本。
引用 Tekton Hub 中的多个远程任务
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... pipelinesascode.tekton.dev/task: "[git-clone, golang-test, tkn]" ...
... pipelinesascode.tekton.dev/task: "[git-clone, golang-test, tkn]" ...
使用
-<NUMBER>
后缀引用 Tekton Hub 中的多个远程任务。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... pipelinesascode.tekton.dev/task: "git-clone" pipelinesascode.tekton.dev/task-1: "golang-test" pipelinesascode.tekton.dev/task-2: "tkn" ...
... 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 中的远程任务的特定版本。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... pipelinesascode.tekton.dev/task: "[git-clone:0.1]" ...
... 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>" ...
...
pipelinesascode.tekton.dev/task: "<https://remote.url/task.yaml>"
...
- 1
- 远程任务的公共 URL。注意
如果使用 GitHub,远程任务 URL 使用与
Repository
自定义资源定义 (CRD) 相同的主机,Pipelines as Code 会使用 GitHub 令牌并使用 GitHub API 获取 URL。例如,如果您有一个类似于
https://github.com/<organization>/<repository>
的存储库 URL,远程 HTTP URL 引用类似于https://github.com/<organization>/<repository>/blob/<mainbranch>/<path>/<file
> 的 GitHub blob,Pipelines as Code 会使用 GitHub App 令牌从该私有存储库中获取任务定义文件。当您使用公共 GitHub 存储库时,Pipelines as Code 的行为与 GitHub 原始 URL 类似,如
https://raw.githubusercontent.com/<organization>/<repository>/<mainbranch>/<path>/<file>
。- GitHub App 令牌的范围为所有者或存储库所在的机构。使用 GitHub Webhook 方法时,您可以在允许个人令牌的任何机构中获取任何私有或公共存储库。
从存储库内的 YAML 文件中引用任务
... pipelinesascode.tekton.dev/task: "<share/tasks/git-clone.yaml>" ...
...
pipelinesascode.tekton.dev/task: "<share/tasks/git-clone.yaml>"
...
- 1
- 到包含任务定义的本地文件的相对路径。
5.3.2. 远程管道注解
您可以使用远程管道注解在多个存储库间共享管道定义。
... pipelinesascode.tekton.dev/pipeline: "<https://git.provider/raw/pipeline.yaml>" ...
...
pipelinesascode.tekton.dev/pipeline: "<https://git.provider/raw/pipeline.yaml>"
...
- 1
- 远程管道定义的 URL。您还可以为同一存储库中的文件提供位置。
您只能使用注解引用一个管道定义。
5.3.2.1. 覆盖远程管道中的任务
默认情况下,如果您在管道运行中使用远程管道注解,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"
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
的任务替换为您定义的任务。