解析器

解析器是 Tekton 中的一个组件,可实现对任务和管道等资源的远程解析。解析器允许您从外部位置引用和获取资源,而不是直接在 Kubernetes 集群中定义它们。

解析器的必要性

传统资源管理的挑战

在 CI/CD 系统中,跨团队和项目管理和共享资源面临若干挑战:

  • 版本控制:难以跟踪和管理 CI/CD 资源的版本
  • 共享:跨团队和组织共享资源的能力有限
  • 维护:多个管道使用的资源更新和维护的挑战
  • 发现性:发现和使用其他人创建的资源的难度
  • 一致性:确保各环境中的资源定义一致

Tekton 的解决方案

Tekton 解析器通过以下方式解决这些挑战:

  • 远程解析:在运行时从外部位置获取资源
  • 版本管理:允许引用特定版本的资源
  • 集中存储:使资源能够存储在中央仓库中
  • 动态获取:在需要时检索资源的最新版本
  • 灵活来源:支持多种资源来源(Git、Bundles、HTTP 等)

优势

  • 可重用性:资源可以轻松分享和重用于团队和项目之间
  • 版本控制:资源可以在源代码管理中进行版本化和跟踪
  • 减少重复:消除重复资源定义的需要
  • 简化更新:可以在一个地方更新资源,所有使用者自动使用更新
  • 改善发现性:资源可以在中央仓库中组织和发现
  • 一致性:确保各环境中的资源定义一致

场景

解析器在各种场景中都很有用,包括:

  • 共享任务库:维护常用任务的中央仓库
  • CI/CD 模板:为团队提供标准化的管道模板
  • 跨环境一致性:确保开发、测试和生产环境中的资源定义一致
  • 组织标准:强制执行组织的 CI/CD 流程标准
  • 第三方集成:利用社区开发的任务和管道
  • 替换集群任务:提供共享任务而无需集群范围的资源

约束和限制

  • 解析器需要网络访问外部资源位置
  • 解析发生在 TaskRun/PipelineRun 创建时,而不是执行时
  • 某些解析器可能需要额外的身份验证配置
  • 网络问题可能会影响远程解析资源的可用性
  • 使用外部资源时必须考虑安全性

原则

解析过程

当解析资源引用时:

  1. Tekton 从资源引用中识别解析器类型
  2. 调用适当的解析器以获取资源
  3. 解析器从外部位置检索资源
  4. 验证资源并将其转换为适当的 Tekton 资源
  5. 使用已解析的资源于 TaskRun 或 PipelineRun 中

资源引用

资源引用指定:

  1. 要使用的解析器类型(git、bundle、hub 等)
  2. 资源的位置
  3. 可选参数,如版本、分支或路径
  4. 如需,身份验证信息

配置示例

Git 解析器示例

apiVersion: tekton.dev/v1
kind: TaskRun
metadata:
  name: git-resolver-example
spec:
  taskRef:
    resolver: git
    params:
      - name: url
        value: https://github.com/tektoncd/catalog.git
      - name: revision
        value: main
      - name: pathInRepo
        value: task/git-clone/0.9/git-clone.yaml

Hub 解析器示例

apiVersion: tekton.dev/v1
kind: TaskRun
metadata:
  name: remote-task-reference
spec:
  taskRef:
    resolver: hub
    params:
    - name: catalog # 可选
      value: tekton-catalog-tasks
    - name: type # 可选
      value: artifact
    - name: kind
      value: task
    - name: name
      value: git-clone
    - name: version
      value: "0.6"

HTTP 解析器示例

apiVersion: tekton.dev/v1
kind: TaskRun
metadata:
  name: http-resolver-example
spec:
  taskRef:
    resolver: http
    params:
      - name: url
        value: https://raw.githubusercontent.com/tektoncd/catalog/main/task/git-clone/0.9/git-clone.yaml

内置解析器

Git 解析器

Git 解析器从 Git 仓库获取资源。

使用案例

  • 在与应用程序代码相同的仓库中存储任务和管道
  • 与应用程序代码一起对 CI/CD 资源进行版本控制
  • 通过 Git 仓库跨团队共享资源

原则

Git 解析器:

  • 克隆指定的 Git 仓库
  • 检出指定的修订版(分支、标签或提交)
  • 从指定路径检索资源
  • 通过 Kubernetes 秘密支持身份验证

Hub 解析器

Hub 解析器从 Tekton Hub 获取资源。

使用案例

  • 发现和使用社区贡献的任务和管道
  • 访问策划的 CI/CD 资源目录
  • 在经过良好测试和维护的资源上实现标准化

原则

Hub 解析器:

  • 连接到 Tekton Hub API
  • 按名称和版本检索指定资源
  • 支持不同目录和版本
  • 提供访问社区贡献的资源

HTTP 解析器

HTTP 解析器从远程 HTTP 服务器获取资源。

使用案例

  • 从远程服务器获取资源
  • 访问自定义或私有资源
  • 利用现有的网络服务进行资源解析

原则

HTTP 解析器:

  • 从远程服务器获取指定资源
  • 提供访问自定义或私有资源

参考文献