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

GitHub Actions中环境变量无法通过process.env获取的问题咨询

排查GitHub Actions环境变量无法传递到Node脚本的问题

以下是针对性的排查步骤,按优先级从易到难推进:

1. 验证工作流中环境变量的有效性

在Build&publish步骤前新增一个debug步骤,直接打印环境变量,确认进入脚本前变量是否存在:

- name: Debug pre-script env
  run: |
    echo "TAG_VERSION: $TAG_VERSION"
    echo "GIT_HEAD: $GIT_HEAD"
  • 如果这里打印为空,说明问题出在环境变量写入阶段;如果能正常打印,问题则在脚本内部的变量传递逻辑。

2. 排查环境变量写入步骤的正确性

针对写入$GITHUB_ENV的两个步骤,分别添加debug验证:

- name: Get version
  run: |
    echo "TAG_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
    # 验证写入的变量值
    echo "Wrote TAG_VERSION: ${GITHUB_REF#refs/*/}"

- name: Get git head
  run: |
    echo "GIT_HEAD=${GITHUB_SHA}" >> $GITHUB_ENV
    # 验证写入的变量值
    echo "Wrote GIT_HEAD: ${GITHUB_SHA}"
  • 重点确认GITHUB_REF的格式:如果当前工作流不是由Tag触发(比如分支推送),${GITHUB_REF#refs/*/}会返回分支名而非Tag,若你的逻辑依赖Tag触发,需检查工作流的on配置是否仅针对Tag事件。

3. 检查publish.sh脚本内部的变量传递

在publish.sh的开头添加shell层面的环境变量打印,确认脚本执行时能拿到变量:

#!/bin/sh
# 脚本开头添加
echo "Shell env TAG_VERSION: $TAG_VERSION"
echo "Shell env GIT_HEAD: $GIT_HEAD"
# 可选:打印所有环境变量排查
# env | grep -E "(TAG_VERSION|GIT_HEAD)"
  • 如果shell层面能打印,但Node中process.env拿不到,需检查:
    • 脚本中是否有unset TAG_VERSION/unset GIT_HEAD这类清除变量的操作;
    • 运行Node的命令是否使用了sudo、env -i等会重置环境的工具(这类工具会默认丢弃大部分环境变量);
    • 脚本的shebang是否正确(比如用了#!/bin/bash但实际运行环境是sh,可能导致变量解析差异)。

4. 对比正常场景的差异

既然另一个场景能正常获取变量,对比两个场景的核心差异:

  • 工作流触发事件:是Tag推送/分支推送/手动触发的区别?
  • 工作流文件配置:是否有变量传递方式的不同(比如另一个场景没有显式在env里传递,而是直接继承)?
  • 脚本执行逻辑:两个场景下publish.sh的内容是否一致?是否有分支逻辑导致变量被覆盖?

内容的提问来源于stack exchange,提问作者Sima thief

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:37:43