如何在GitHub Actions中通过Python设置可跨步骤使用的环境变量
问题原因
在Python脚本中通过os.environ修改的环境变量仅对当前Python进程及其启动的子进程生效,GitHub Actions的每个工作流步骤都是独立的运行进程,无法读取其他进程内部的环境变量,因此需要通过GitHub Actions官方提供的跨步骤变量传递机制实现需求。
修复方案
GitHub Actions提供了$GITHUB_ENV环境文件,只要将需要共享的变量按变量名=值的格式追加写入该文件,后续所有步骤都会自动加载这些变量作为环境变量。
修改后的Python脚本示例
import os # 原有逻辑不变,get_version_from_commit、commit_msg、app_name按你原有定义处理 new_ver = get_version_from_commit(commit_msg) # 获取GITHUB_ENV文件路径 env_file_path = os.getenv("GITHUB_ENV") if new_ver: if new_ver == "false": # 追加写入变量到GITHUB_ENV with open(env_file_path, "a", encoding="utf-8") as f: f.write("SHOULD_PUSH=0\n") print("Not pushing the image to k8s") exit(0) else: new_tag = app_name + ":" + str(new_ver) with open(env_file_path, "a", encoding="utf-8") as f: f.write(f"DOCKER_IMAGE_TAG={new_tag}\n") f.write("SHOULD_PUSH=1\n") print("New tag: " + new_tag) exit(0)
注意事项
- 必须以追加模式
a打开GITHUB_ENV文件,覆盖模式会清空之前步骤设置的所有环境变量 - 每行变量写完后要加换行符
\n,避免多个变量拼接导致格式错误 - 修改完成后你原有的后续工作流步骤无需调整,直接通过
${{ env.DOCKER_IMAGE_TAG }}、${{ env.SHOULD_PUSH }}即可读取对应值
内容的提问来源于stack exchange,提问作者Rumesh Madhusanka
相关产品推荐
相关产品推荐

