StepActions
StepAction 是 Tekton Pipelines 中由 Step 执行的可复用、可编写脚本的工作单元。StepAction 允许你定义容器化操作,并在不同的 Task 之间引用和复用这些操作。
目录
为什么需要 StepAction传统 Task 面临的挑战Tekton 的解决方案优势场景约束和限制原则StepAction 执行模型引用模型配置示例基本 StepAction 示例在 Task 中引用 StepAction重要参数Parameters使用场景原则配置示例Results使用场景原则配置示例WorkingDir使用场景配置示例SecurityContext使用场景配置示例VolumeMounts使用场景配置示例When Expressions使用场景配置示例远程 StepActions使用场景配置示例参考为什么需要 StepAction
传统 Task 面临的挑战
在 StepAction 出现之前,Task 存在一些限制:
- 可复用性:Task 中定义的 Step 难以轻松提取和复用
- 可维护性:不同 Task 之间必须重复常见的 Step 逻辑
- 版本控制:难以将单个 Step 与 Task 分开进行版本控制
- 一致性:难以确保常见操作的实现保持一致
Tekton 的解决方案
StepAction 通过以下方式应对这些挑战:
- Step 级别的可复用性:将常见操作封装为可复用组件
- 声明式定义:将 StepAction 定义为 Kubernetes Custom Resource
- 参数化:接受参数以自定义行为
- 结果生成:生成可供其他 Step 使用的结果
- 资源控制:独立于 Task 定义资源需求
优势
- 模块化:将复杂操作拆分为可复用组件
- 一致性:确保不同 Task 中常见操作的实现完全一致
- 可维护性:只需更新一次 StepAction,所有引用它的 Task 都能受益
- 清晰性:将执行内容的定义(StepAction)与执行时机(Step)分离
- 版本控制:独立于 Task 对 StepAction 进行版本控制
场景
StepAction 适用于各种场景,包括:
- 常见操作:Git clone、镜像构建、安全扫描
- 标准化工具:Lint 工具、格式化工具、测试运行器
- 组织特定逻辑:自定义部署流程、审批工作流
- 共享实用工具:版本生成、配置验证
- 集成组件:服务交互、API 操作
约束和限制
- StepAction 只能在 Step 中使用
- 无法在 Step 之间传递 Step Result
- 参数不能直接在脚本中使用(必须使用环境变量)
- StepAction 不能独立运行(不同于 TaskRuns 或 PipelineRuns)
- 需要将
enable-step-actionsfeature flag 设置为 "true"
原则
StepAction 执行模型
当 Step 引用 StepAction 时:
- Step 提供必要的上下文和参数
- StepAction 定义容器镜像和执行逻辑
- Step 可以覆盖资源和超时等特定配置
- 被引用的 StepAction 执行其定义的命令或脚本
- 后续步骤可以使用 StepAction 生成的 Results
引用模型
StepAction 不是 Step 的组成部分,而是:
- Step 是可以引用 StepAction 的可执行组件
- Step 提供编排和上下文
- StepAction 提供可复用逻辑
- Step 可以引用本地或远程 StepAction
配置示例
基本 StepAction 示例
在 Task 中引用 StepAction
重要参数
Parameters
当 Step 引用 StepAction 时,可以使用 Parameters 对 StepAction 进行自定义。
使用场景
- 配置连接详细信息
- 指定目标或目的地
- 设置操作标志
- 定义版本信息
- 控制行为
原则
StepAction 中的 Parameters:
- 在 StepAction 规范中声明
- 可以具有默认值
- 从引用它的 Step 传入
- 支持 string、array 和 object 类型
- 不能直接在脚本中使用(应通过环境变量使用)
配置示例
Results
Results 允许 StepAction 输出值,供其他 Step 或 Task 使用。
使用场景
- 共享构建信息
- 传递生成的标识符
- 传递状态信息
- 提供构件位置
原则
Results:
- 在 StepAction 规范中声明
- 由 StepAction 写入特定文件路径
- 对后续 Step 或 Task 可用
配置示例
WorkingDir
WorkingDir 用于指定 StepAction 的工作目录。
使用场景
- 为操作设置正确的上下文
- 确保命令在正确的位置运行
- 确保 StepAction 使用方式的一致性
配置示例
SecurityContext
SecurityContext 用于配置 StepAction 的安全设置。
使用场景
- 设置容器权限
- 配置用户和组 ID
- 管理安全约束
配置示例
VolumeMounts
VolumeMounts 允许 StepAction 访问外部存储。
使用场景
- 访问配置文件
- 存储持久化数据
- 在步骤之间共享信息
配置示例
When Expressions
When Expressions 允许控制引用 StepAction 的 Step 是否执行。
使用场景
- 根据参数有条件地执行
- 根据 workspace 的可用性跳过步骤
- 根据前一步骤的结果控制工作流
配置示例
远程 StepActions
可以从 git 仓库等远程位置引用 StepActions。
使用场景
- 集中管理 StepAction
- 对 StepAction 进行版本控制
- 在组织之间共享 StepAction