Tasks
Task 是一组在 Kubernetes 的同一节点上按顺序执行的 Step。Task 是 Tekton CI/CD 工作流的基本构建块,允许你定义一系列按顺序执行的操作。
目录
为什么需要 Task传统 CI/CD 的挑战Tekton 的解决方案优势场景约束和限制原则Task 执行模型Step 执行配置示例基本 Task 示例结果使用场景原则配置示例重要参数工作区使用场景原则配置示例参考资料为什么需要 Task
传统 CI/CD 的挑战
在传统 CI/CD 系统中,工作流步骤通常与 CI/CD 平台本身紧密耦合。这会带来一些挑战:
- 可移植性:在一个 CI/CD 系统中定义的工作流无法轻松迁移到另一个系统
- 灵活性:针对不同步骤自定义执行环境的能力有限
- 可扩展性:难以根据资源需求扩展单个步骤
- 可复用性:为一个项目定义的步骤难以在其他项目中复用
Tekton 的解决方案
Tekton Task 通过以下方式应对这些挑战:
- 基于容器的执行:每个 Step 都在其自身的容器中运行,从而提供隔离性和灵活性
- Kubernetes 原生:Task 以 Kubernetes Pod 的形式运行,利用 Kubernetes 的调度和扩展能力
- 声明式定义:Task 定义为 Kubernetes Custom Resource,具有可移植性并支持版本控制
- 可复用性:Task 可以在不同项目和团队之间共享和复用
优势
- 隔离性:每个 Step 都在其自身的容器中运行,避免依赖项之间发生冲突
- 可移植性:Task 无需修改即可在任何 Kubernetes 集群上运行
- 可复用性:Task 可以在不同团队和项目之间共享
- 可扩展性:Task 利用 Kubernetes 的调度和资源管理能力
- 灵活性:Task 可以通过参数和工作区进行自定义
- 可观测性:可以通过 Kubernetes 监控和记录 Task 的执行情况
场景
Task 适用于各种场景,包括:
- 构建操作:编译源代码、运行单元测试
- 部署操作:将应用程序部署到不同环境
- 验证操作:运行安全扫描、代码质量检查
- 基础设施操作:预配和配置基础设施
- 数据处理:ETL 操作、数据验证
约束和限制
- Task 在单个 Kubernetes 节点上运行,无法跨多个节点
- Task 中的所有 Step 共享同一个 Pod 生命周期
- Task 中的 Step 必须按顺序运行,不能并行运行
- Task 处理条件执行的能力有限(复杂条件请使用 Pipeline)
- Task 的执行时间受 Kubernetes Pod 超时限制
原则
Task 执行模型
通过 TaskRun 执行 Task 时:
- Kubernetes 为 Task 创建一个 Pod
- Task 中的每个 Step 都会成为 Pod 中的一个容器
- Step 按定义的顺序依次运行
- Tekton 会将入口点二进制文件注入每个 Step 容器
- 入口点确保 Step 按正确顺序运行
- 工作区会作为卷挂载到 Pod 中
- 参数会以环境变量或文件的形式传递给 Task
- 结果会被存储,并提供给后续 Task
Step 执行
Task 中的 Step 按顺序执行。每个 Step:
- 在其自身的容器中运行
- 可以访问共享工作区
- 可以访问前序 Step 的输出
- 可以为后续 Step 或 Task 生成结果
配置示例
基本 Task 示例
结果
结果允许 Task 生成可供其他 Task 使用的输出值。
使用场景
- 传递构建版本信息
- 共享生成的构件路径
- 传递测试结果
- 传递部署 URL
原则
结果:
- 在 Task 规范中声明
- 由 Task 写入特定文件路径
- 在 Task 完成后由 Tekton 读取
- 在 Pipeline 中提供给后续 Task
配置示例
重要参数
工作区
工作区允许 Task 之间共享数据,并提供访问持久化卷的方式。
使用场景
- 在 Task 之间共享源代码
- 存储构建构件
- 共享配置文件
- 在多次 Task 运行之间持久化数据
原则
工作区:
- 在 Task 规范中声明
- 在创建 TaskRun 时绑定到实际存储
- 挂载到每个 Step 容器中指定的路径
- 可以在 Pipeline 中由多个 Task 共享