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
相关产品推荐
相关产品推荐

