You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Actions如何将Curl响应的JSON对象导出为ENV环境变量

报错原因
  • 原始写法直接将多行JSON内容通过echo "变量名=内容"的格式写入$GITHUB_ENV时,Github Actions会按换行符逐行解析环境变量定义,JSON中带缩进、引号的独立行会被识别为非法的变量格式,触发解析失败。
  • 原计划的读取写法存在语法问题:${{ env.GIT_COMMIT_OBJECT }}是工作流预替换表达式,运行步骤前会直接把多行JSON文本插入shell命令位置,会直接破坏shell语法,无法正常通过管道传给jq处理。
正确实现方法

1. 单次调用API存储完整JSON到环境变量

使用Github Actions支持的多行环境变量定界符语法写入,避免内容被逐行拆分:

- name: 拉取PR信息
  run: |
    # 单次请求拿到API返回,加-s关闭进度输出,加-f在请求失败时直接报错
    PR_DATA=$(curl -f -s -u USER:TOKEN \
      -H "Accept: application/vnd.github+json" \
      "https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.number }}")
    # 写入多行环境变量,标记定界符开始
    echo "GIT_PR_OBJECT<<_JSON_END_" >> $GITHUB_ENV
    # 写入完整JSON内容
    echo "$PR_DATA" >> $GITHUB_ENV
    # 写入定界符结束标记,必须单独占一行
    echo "_JSON_END_" >> $GITHUB_ENV

注意点:

  • 定界符_JSON_END_可以替换为任意不会在JSON内容中单独成行的字符串,只要首尾保持一致即可
  • 写入JSON内容时变量必须加双引号,避免shell吞掉换行、空格破坏JSON结构
  • 注意变量名前后保持统一,不要混用GIT_PR_OBJECT和GIT_COMMIT_OBJECT导致读取空值

2. 后续步骤读取JSON字段的正确写法

不要用工作流表达式直接替换变量值,直接通过shell环境变量取值传给jq:

- name: 提取提交者邮箱
  run: |
    echo "GIT_EMAIL=$(echo "$GIT_PR_OBJECT" | jq -r '.commit.author.email')" >> $GITHUB_ENV

其他字段的提取逻辑完全一致,只要修改jq的取值路径即可,全程不需要重复发起API请求。

内容的提问来源于stack exchange,提问作者yung peso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:42:24