使用qsub提交集群任务时gitpython获取当前git哈希失效如何解决
解决方案
场景1:集群节点可访问提交任务时的原仓库路径(绝大多数共享存储集群符合该条件)
Torque/PBS集群会默认注入PBS_O_WORKDIR环境变量,存储你提交任务时的本地目录,直接读取该变量即可定位到原git仓库,无需修改提交命令,也无需硬编码路径,修改后的Python代码兼容本地运行和集群运行:
import git import os # 优先读取集群任务的提交原路径,本地运行时回退到当前工作目录 repo_root = os.getenv("PBS_O_WORKDIR", os.getcwd()) rep = git.Repo(repo_root, search_parent_directories=True) git_hash = rep.head.object.hexsha with open('logfile.txt', 'w+') as writer: writer.write('Code version: {}'.format(git_hash))
场景2:集群节点无法访问原仓库路径
在提交任务的本地环境提前获取git哈希,通过qsub的-v参数将哈希作为环境变量传递给集群任务,无需在集群侧访问git仓库:
- 提交命令修改为:
# 本地执行提交命令,提前获取git哈希传入集群 qsub -l nodes=1:ppn=12 -v GIT_HASH="$(git rev-parse HEAD)" analysis.py -q shared
- 对应修改Python代码:
import git import os git_hash = os.getenv("GIT_HASH") if not git_hash: # 本地运行时回退到原逻辑 rep = git.Repo(os.getcwd(), search_parent_directories=True) git_hash = rep.head.object.hexsha with open('logfile.txt', 'w+') as writer: writer.write('Code version: {}'.format(git_hash))
内容的提问来源于stack exchange,提问作者Pibe_chorro
相关产品推荐
相关产品推荐

