首页/开发/CI/CD 与发布速查/GitHub Actions 复合动作
工具链要点63 条

GitHub Actions 复合动作

把多个步骤打包成动作:action.yml 中 runs.using: composite 内联步骤,供同一作业或其他仓库复用。

CI/CD 与发布速查开发更新于 2026-10-13

复合动作是什么

复合动作(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:校验阶段直接失败。
动作内假设调用方环境:显式声明依赖,保持可移植性。
引用固定版本:上游更新不会直接冲击所有调用方。
动作也是代码:仓库里的动作目录要有人负责评审,避免各改各的。

易错点

  • 复合动作用 run 漏写 shell:校验阶段直接失败。
  • 动作内假设调用方环境:换一个仓库就坏。
  • 本地动作未先 checkout:uses ./path 找不到。
  • 引用动作不打 tag:上游改动直接影响所有调用方。
  • 把密钥硬编码进动作:调用方无法控制凭据来源。

数据来源与参考

  • GitHub Docs《Creating a composite action》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌