GitHub Actions中如何访问github.event嵌套JSON对象字段
核心原因
你访问失败基本是两个问题:
- 你贴的JSON结构是自己脑补的,多套了一层不存在的
event嵌套,github.event本身就对应webhook下发的完整事件负载,不存在github.event.event路径。 - 混淆了不同触发事件的payload结构,90%的同类问题都是把pull_request等其他事件的commit结构,和push事件的结构搞混了。你能拿到
github.event.commits[0].message,只能说明你当前触发事件下commits[0].message路径存在,不代表你对commits下其他字段的层级认知正确。
正确访问写法
首先确认你的工作流是被push事件触发——只有push事件的github.event根节点下直接挂载commits数组,对应字段访问路径如下:
- 提交作者姓名:
${{ github.event.commits[0].author.name }} - 提交作者邮箱:
${{ github.event.commits[0].author.email }} - 提交作者用户名:
${{ github.event.commits[0].author.username }} - 提交提交者姓名:
${{ github.event.commits[0].committer.name }} - 提交提交者邮箱:
${{ github.event.commits[0].committer.email }} - 提交提交者用户名:
${{ github.event.commits[0].committer.username }}
注意:如果是
pull_request事件触发,commits相关字段不在event根节点,且结构多一层嵌套,正确路径为${{ github.event.pull_request.head.commit.author.name }},不要直接套push事件的路径。
失效排查方案
如果上述写法仍不生效,按以下步骤排查:
- 不要靠脑补写路径,先加调试步骤打印完整的event上下文,看实际返回的结构:
- name: 打印完整event负载 run: echo '${{ toJSON(github.event) }}'
- 检查数组索引是否越界:单次提交的push事件只有
commits[0]有值,批量push多个提交时,要对应匹配索引,不要访问不存在的数组项。 - 字段值可能为空:网页端创建的提交、机器人提交的
username字段经常为null,直接访问会触发表达式错误,建议加默认值兜底:# 兜底写法,字段为空时返回unknown AUTHOR_NAME: ${{ github.event.commits[0].author.name || 'unknown' }} - Shell中取值要加引号:如果在
run步骤里直接用表达式赋值,必须给表达式加双引号,避免字段值里的空格、特殊字符导致解析截断:# 错误写法,特殊字符会导致取值失败 - run: AUTHOR_NAME=${{ github.event.commits[0].author.name }} # 正确写法 - run: | AUTHOR_NAME="${{ github.event.commits[0].author.name }}" echo "$AUTHOR_NAME" - 需要遍历所有提交时,建议用
jq解析JSON结构,避免手写路径出错:
- name: 遍历所有提交信息 run: | COMMITS_JSON='${{ toJSON(github.event.commits) }}' COMMIT_COUNT=$(echo "$COMMITS_JSON" | jq length) echo "本次推送共 $COMMIT_COUNT 个提交" for i in $(seq 0 $((COMMIT_COUNT-1))); do COMMIT=$(echo "$COMMITS_JSON" | jq ".[$i]") echo "提交信息: $(echo "$COMMIT" | jq -r '.message')" echo "作者: $(echo "$COMMIT" | jq -r '.author.name') <$(echo "$COMMIT" | jq -r '.author.email')>" echo "提交者: $(echo "$COMMIT" | jq -r '.committer.name') <$(echo "$COMMIT" | jq -r '.committer.email')>" done
内容的提问来源于stack exchange,提问作者yung peso
相关产品推荐
相关产品推荐

