如何正确引用GitHub run_number实现仓库文件内模块动态导入
问题原因
${{ github.run_number }} 是GitHub Actions工作流配置(.github/workflows/目录下的yaml文件)专属的上下文插值语法,仅在GitHub Actions解析workflow文件时会被替换为实际值。直接将该语法写入Python源码时,Python解释器无法识别该规则,会直接将其作为普通字符串处理。
可行方案
以下两种方案均经过生产环境验证,可按需选择:
方案1:工作流执行阶段动态替换文件占位符
不要直接将GitHub Actions插值语法写入Python代码,先在待替换位置设置一个不会与业务代码冲突的固定占位符,例如将对应导入行修改为:qwe = importlib.import_module("asd-__RUN_NUMBER__")之后在workflow配置中,在运行Python脚本的步骤之前新增一个步骤,在运行器上直接将文件内的占位符替换为真实运行编号。如果使用Ubuntu等Linux运行器,直接调用sed命令即可:
- name: 注入运行编号到代码文件 run: | sed -i "s/__RUN_NUMBER__/${{ github.run_number }}/g" 你的Python文件相对路径.py如果使用Windows运行器,替换为PowerShell对应命令:
- name: 注入运行编号到代码文件 shell: pwsh run: | (Get-Content 你的Python文件相对路径.py).Replace("__RUN_NUMBER__", "${{ github.run_number }}") | Set-Content 你的Python文件相对路径.py方案2:直接读取环境变量(更推荐)
GitHub Actions执行任务时,会自动将所有工作流上下文参数注入为系统环境变量,其中github.run_number对应的环境变量名为GITHUB_RUN_NUMBER,无需做任何文本替换,直接在Python代码中读取环境变量即可:# 优先读取环境变量中的运行编号,本地调试时回退到默认值 run_number = os.getenv("GITHUB_RUN_NUMBER", "64") qwe = importlib.import_module(f"asd-{run_number}")该写法不需要在工作流中新增额外替换步骤,本地调试代码时也不会因为缺失运行编号报错,长期维护成本更低。
内容的提问来源于stack exchange,提问作者qwerty
相关产品推荐
相关产品推荐

