1.12. 使用 Pipelines as Code 解析器
Pipelines as Code 解析器可确保运行的管道运行不会与其他其它运行冲突。
要分割您的管道和管道运行,请将文件存储在 .tekton/ 目录或其子目录中。
如果 Pipelines as Code 在 .tekton/ 目录中的任何 YAML 文件中发现一个带有对任务或管道的引用的管道运行,Pipelines as Code 会自动解析引用的任务,以使用 PipelineRun 对象中嵌入的 spec 提供单个管道运行。
如果 Pipelines as Code 无法解析 Pipeline 或 PipelineSpec 定义中引用的任务,则运行会在对集群应用更改前失败。您可以在 Git 供应商平台上查看问题,在 Repository CR 所在的目标命名空间的事件内。
当解析器观察到以下类型的任务时会跳过解析过程:
- 对一个集群任务的引用。
- 任务或管道捆绑包。
-
具有没有
tekton.dev/前缀的 API 版本的自定义任务。
解析器以字面形式使用此类任务,不进行任何转换。
如果要在拉取请求中发送它之前在本地对管道运行进行测试,请使用 tkn pac resolve 命令。
您还可以引用远程管道和任务。
1.12.1. 在 with Pipelines as Code 中使用远程任务注解 复制链接链接已复制到粘贴板!
Pipelines as Code 支持在一个管道运行中使用注解来获取远程任务或管道。如果您在管道运行或 PipelineRun 或 PipelineSpec 对象中引用远程任务,Pipelines as Code 码解析器会自动包含它。如果在获取远程任务或解析它们时出现错误,Pipelines as Code 将停止处理任务。
要包含远程任务,请参阅以下注解示例:
引用 Tekton Hub 中的远程任务
在 Tekton Hub 中引用单个远程任务。
... pipelinesascode.tekton.dev/task: "git-clone" ...
... pipelinesascode.tekton.dev/task: "git-clone"1 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Pipelines as Code 包括来自 Tekton Hub 的任务的最新版本。
引用 Tekton Hub 中的多个远程任务
... pipelinesascode.tekton.dev/task: "[git-clone, golang-test, tkn]" ...
... pipelinesascode.tekton.dev/task: "[git-clone, golang-test, tkn]" ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
-<NUMBER>后缀引用 Tekton Hub 中的多个远程任务。... 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 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 默认情况下,Pipelines as Code 会将字符串解析为从 Tekton Hub 获取最新的任务。
引用 Tekton Hub 中的远程任务的特定版本。
... pipelinesascode.tekton.dev/task: "[git-clone:0.1]" ...
... pipelinesascode.tekton.dev/task: "[git-clone:0.1]"1 ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
- 到包含任务定义的本地文件的相对路径。
1.12.2. 在 Pipelines as Code 中使用远程管道注解 复制链接链接已复制到粘贴板!
您可以使用远程管道注解在多个存储库间共享管道定义。
...
pipelinesascode.tekton.dev/pipeline: "<https://git.provider/raw/pipeline.yaml>"
...
...
pipelinesascode.tekton.dev/pipeline: "<https://git.provider/raw/pipeline.yaml>"
...
- 1
- 远程管道定义的 URL。您还可以为同一存储库中的文件提供位置。
您只能使用注解引用一个管道定义。