复合动作是什么
复合动作(Composite Action)把多个步骤打包成一个可复用的动作:action.yml 里用 runs.using: composite 内联一系列步骤,同一仓库或跨仓库通过 uses 引用。它解决的是步骤级复用,比复制粘贴 YAML 更可靠、比容器动作更轻量;步骤里的 run 必须声明 shell,输入输出用 inputs 与 outputs 显式声明。
基本信息
| 位置 | 仓库内目录的 action.yml 或独立仓库 |
|---|---|
| 引用 | uses: ./path 或 owner/repo@ref |
| 步骤 | composite 的 run 必须声明 shell |
| 输入输出 | inputs 与 outputs 显式声明 |
| 对比 | 动作等于步骤级复用,工作流等于作业级复用 |
| 版本 | 独立仓库发布时打 tag,引用固定版本 |
| 路径 | 本地动作要先 checkout 才能引用 |
| 调试 | 动作内步骤失败时按嵌套视图定位到具体步骤 |
复合动作示例
复合动作示例
# action.yml 动作定义文件
name: setup-and-build
inputs:
version:
description: 构建版本
required: true
runs:
using: composite
steps:
- run: echo setup ${{ inputs.version }} # 准备
shell: bash
- run: echo build # 构建
shell: bash典型使用场景
- 流程标准化:多个工作流共用同一套构建与发布步骤
- 组织内分发:平台团队发布标准动作,业务仓库直接引用
- 降重复:把十几行重复 YAML 收敛成一个 uses
- 权限封装:动作内部处理认证步骤,调用方无需重复配置
- 版本管理:独立仓库加 tag,升级动作走评审
- 取舍:纯步骤组合用复合动作更轻,需要独立环境再用容器动作
- 迁移存量:把重复片段逐步抽成动作,每次只动一处
项目与约束
| 项目 | 说明 |
|---|---|
| 与容器动作 | 复合动作直接跑步骤,不启独立容器 |
| 与工作流复用 | 动作嵌在作业步骤里,工作流复用整个作业 |
| shell 要求 | 每个 run 步骤必须写 shell |
| 路径 | 本地动作要先 checkout 才能用 |
| 输出 | outputs 需在动作内声明并赋值 |
输入输出用 inputs 与 outputs 声明:比依赖调用方预置环境变量更清晰。
复合动作内 run 漏写 shell:校验阶段直接失败。
动作内假设调用方环境:显式声明依赖,保持可移植性。
引用固定版本:上游更新不会直接冲击所有调用方。
动作也是代码:仓库里的动作目录要有人负责评审,避免各改各的。