介绍
Tekton Results 旨在帮助用户对 CI/CD 工作负载的历史记录进行逻辑分组,并将长期的 Results 存储与 Pipeline controller 分离。这样可以让你:
- 提供关于 CI/CD 工作流的自定义 Results 元数据,这些信息在 Tekton TaskRun/PipelineRun CRD 中不可用(例如,运行后的操作)
- 将相关工作负载分组在一起(例如,将相关的 TaskRun 和 PipelineRun 打包为一个单元)
- 使长期的 Results 历史记录独立于 Pipeline CRD controller,从而释放 etcd 资源用于运行执行。
- 存储由 TaskRun/PipelineRun 生成的日志,以便在完成运行后清理它们来节省资源。
更多背景和设计动机可以参考 TEP-0021。
概览
Tekton Results 由两个主要组件组成:
- 一个可通过 API 查询的 gRPC API server,由持久化存储提供支持(有关最新 API 规范,请参阅项目源代码中的 proto/v1alpha2)。
- 一个 watcher controller,用于监视 TaskRun 和 PipelineRun 的更新并将其报告给 API server。
Results 的生命周期
- 用户像往常一样通过 Kubernetes API 创建 TaskRun 或 PipelineRun。
- Results Watcher 监听所有 TaskRun/PipelineRun 的变更。
- 如果 TaskRun/PipelineRun 发生变化,watcher 会使用 Results API 更新(或创建)相应的
Record(如有需要,也会创建Result)。- watcher 还会使用一个标识符为原始 TaskRun/PipelineRun 添加注解。
- 用户可以直接从 API 获取/查询 Results/Records 数据。一旦 TaskRun/PipelineRun 完成并成功存储到 Results API 中,原始的 CRD 对象就可以安全地从集群中删除。
数据模型
- record 是单一实例的数据。它们通常是执行数据(例如,PipelineRun、TaskRun、日志),但也可能引用有关事件/执行的其他数据。Record 的设计目标是灵活支持工具希望提供的任何有关 CI 事件的信息。
- Results 是 record 的聚合器,允许用户将多个 record 作为单个实体进行引用。例如,你可能会有一个 Results,将以下 record 进行分组:
- 触发操作的源事件(例如,pull request、push)。
- 创建的 PipelineRun。
- 为响应 PipelineRun 而创建的 TaskRun。
- cloud events 的接收。
- source status 更新的接收。
(注意:watcher 当前不支持所有这些类型的数据,但这些示例展示了我们计划支持的数据类型。)