可复用工作流是什么
把整条工作流定义为可调用单元:用 workflow_call 声明输入、密钥与输出,其他工作流以 uses 引用;适合组织级流程标准化——多处复用同一段构建或发布流程。它是作业级复用,与步骤级的复合动作按粒度选择;嵌套调用支持的层级有限,调用链保持简短更易排查。
基本信息
| 定义 | on: workflow_call(inputs、secrets、outputs) |
|---|---|
| 调用 | uses: org/repo/.github/workflows/x.yml@ref |
| 粒度 | 作业级复用 |
| 嵌套 | 支持层级有限,链路保持简短 |
| 对比 | 复合动作是步骤级复用 |
典型使用场景
- 组织标准化:所有仓库共用同一段流水线定义
- 减少重复:公共构建逻辑单点维护
- 版本化:引用按 ref 固定,升级可控
- 权限约束:被调用方按需声明所需密钥
- 输出传递:下游作业消费上游输出
- 平台迁移:集中改一处适配新环境
被调用与调用
被调用与调用
# 被调用方
on:
workflow_call:
inputs:
target: {required: true, type: string}
secrets:
token: {required: true}
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "build ${{ inputs.target }}"
# 调用方
jobs:
call:
uses: org/repo/.github/workflows/build.yml@v1 # ref 固定
with:
target: prod对接方式读法
| 项 | 写法 | 注意 |
|---|---|---|
| 输入 | inputs 声明类型与必填 | 调用方用 with 传值 |
| 密钥 | secrets 显式声明 | 不自动整体传递 |
| 输出 | outputs 供下游消费 | 名称与类型保持稳定 |
| 引用 | uses 带上 ref | 固定版本防上游突变 |
| 嵌套 | 控制调用深度 | 层级过多难排查 |
复用工作流是作业级复用,复合动作是步骤级复用:按粒度选择。
引用固定版本:用分支引用时上游一改全线受影响,用 tag 或提交更稳。
密钥显式声明:需要什么声明什么,减少被调用方拿到的密钥面。
组织级实践
- 输入与版本策略:组织公共工作流仓按版本发布,调用方按需升级
- 集中治理:安全团队在公共工作流里加统一校验,各仓直接受益
权限只能收窄不能放大:被调用方拿到的权限不超过调用方,按最小集声明。
日志在调用方聚合显示被调用作业:排查时先定位层级再往下钻。
改动先自测:被调用方修改后先用测试调用方验证,再让正式仓库升级。