作业输出是什么
GitHub Actions 的作业之间通过 outputs 传值:步骤把键值写进 GITHUB_OUTPUT 文件,作业级 outputs 引用步骤输出,下游作业用 needs 读取。这个通道适合传版本号、制品名一类小标量;旧接口 set-output 已弃用。多行值要用定界符写法,且不要把它当可信数据直接拼进命令。
基本信息
| 步骤级 | echo "key=value" >> "$GITHUB_OUTPUT" |
|---|---|
| 作业级 | outputs: tag: ${{ steps.x.outputs.tag }} |
| 下游读取 | needs.<job>.outputs.<key> |
| 多行值 | 用定界符语法写入 |
| 旧接口 | set-output 已弃用,不要新写 |
| 限制 | 不适合传大对象或秘密,敏感值会脱敏 |
| 调试 | 打印 needs 上下文核对取值 |
输出与读取
输出与读取
jobs:
meta:
runs-on: ubuntu-latest
outputs:
tag: ${{ steps.t.outputs.tag }} # 暴露给下游作业
steps:
- id: t # 步骤 id 必须声明
run: echo "tag=v1.9.0" >> "$GITHUB_OUTPUT" # 写入输出文件
use:
needs: meta # 声明依赖后才能读取
runs-on: ubuntu-latest
steps:
- run: echo "deploy ${{ needs.meta.outputs.tag }}" # 读取上游输出典型使用场景
- 版本串联:构建作业产出版本号,部署作业按版本拉取制品
- 条件分流:上游输出决定下游是否执行
- 制品命名:镜像标签、包名等元数据在作业间传递
- 变更检测:输出「哪些模块变了」驱动后续矩阵
- 结果汇总:多分片作业的结果汇总后再统一发布
- 调试排查:打印输出链路排查传值断点
- 多环境发布:环境名作为输出在部署链中传递
要素与写法
| 要素 | 写法 | 注意 |
|---|---|---|
| 写入 | >> "$GITHUB_OUTPUT" | 引号不能省,防空格截断 |
| 步骤输出 | steps.<id>.outputs.<key> | id 不能漏写 |
| 作业输出 | outputs: key: ${{ steps... }} | 引用要写全 |
| 下游读取 | needs.<job>.outputs.<key> | needs 声明依赖 |
| 多行值 | 定界符语法 | 普通 echo 会丢换行 |
| 典型错误 | needs 未声明就读取 | 解析为空值 |
| 读取失败 | 输出为空或未定义 | 先查 id、needs 与写入格式 |
把上游输出当可信数据:来自不可信步骤的值要先校验再拼进命令,防注入。
输出通道超限会被丢弃:体积统计按作业累计,传大 JSON 前先换算。
多行值写入 GITHUB_OUTPUT 使用定界符语法;简单标量直接 key=value。
输出通道有体积上限(1 MB 级别),别用它传文件内容或大 JSON。
输出值在日志中会脱敏:含 secrets 的值被自动掩码,别靠在日志里查看输出内容。