如何在GitHub工作流中读取脚本内添加的环境变量?
问题
我在tmp.py脚本中编写了以下代码:
os.environ["VERSION"] = "Version 1.1.1.2.2.3" print(os.system('env')) #prints all env included above one
执行该脚本时能打印出包含上述变量在内的所有环境变量,但在GitHub工作流的后续步骤中尝试读取该变量时输出为空:
- name: Run script run: python3 tmp.py - name: print env var if: always() run: | echo ${{ env.VERSION }} #Blank, expected the value "Version 1.1.1.2.2.3"
查阅GitHub文档得知,{{ env.APP_VERSION }}这类语法仅适用于工作流中定义的环境变量。我尚未尝试Job.<job_id>.env方式,认为其与作业环境相关,请问如何在工作流中获取脚本内设置的VERSION变量值?
解决方案
GitHub Actions的每个步骤都是独立进程,脚本内设置的环境变量仅在当前进程生效,无法直接传递到后续步骤。要实现变量跨步骤传递,可采用以下几种方法:
方法1:写入GITHUB_ENV文件(推荐)
GitHub Actions支持通过写入$GITHUB_ENV文件来定义后续步骤可用的环境变量。修改你的Python脚本:
import os with open(os.environ['GITHUB_ENV'], 'a') as env_file: env_file.write('VERSION=Version 1.1.1.2.2.3\n')
修改后,后续步骤即可通过${{ env.VERSION }}或$VERSION正常读取该变量。
方法2:通过工作流命令输出变量(已废弃,仅兼容旧版Runner)
在Python脚本中用指定格式输出变量,让Actions捕获:
print(f'::set-env name=VERSION::Version 1.1.1.2.2.3')
注意:该命令已被官方标记为废弃,优先使用方法1。
方法3:写入临时文件,后续步骤读取内容
在脚本中将变量值写入临时文件:
with open('version.txt', 'w') as f: f.write('Version 1.1.1.2.2.3\n')
后续步骤通过读取文件获取变量:
- name: print env var if: always() run: | VERSION=$(cat version.txt) echo $VERSION
内容的提问来源于stack exchange,提问作者Vipin Chaudhary
相关产品推荐
相关产品推荐

