根据您的问题的措辞,我假设您有一台本地计算机和一台远程计算机,您可以在其中更新两个文件——一个 Python 脚本和一个 Bash 脚本。两个文件都在 SVN 控制下,并且两台机器都可以访问同一个 SVN 服务器。
很抱歉,我没有针对您的网格系统的任何建议,但让我列出一些我认为对任何部署都很重要的一般要点。
保持生产更改仅限于配置更改。您写道您必须“使用服务器上的数据集路径”;这对我来说听起来就像您将路径硬编码到您的 Python 脚本中一样。这不是一个好主意,正是因为您需要在将脚本移动到的每台其他机器上更改这些路径。如果您将这些更改提交回 SVN,那么在您的本地计算机上,您将拥有远程路径,并且不断地......(如果不仅有路径,还有密码怎么办?SVN 中不应该有生产密码服务器。)
因此,将路径和其他设置信息保存在.ini
文件中并使用ConfigParser读取它,或者使用.json
文件并使用json模块。在本地保存一份文件副本,在远程保存一份,都在同一路径下,都没有 SVN 控制,只需在 Python 脚本中保留该配置文件的路径(如果不能同时保留,则从命令行获取)同一路径下的配置)。
保持配置尽可能小。任何配置都是应用程序的“移动部分”,任何系统的移动部分越少,系统就越健壮。属于配置的一个很好的指标就是每次移动代码时都必须对其进行编辑。不需要编辑的东西可以作为常量保留在代码中。
自动化您的部署。您可以通过本地机器上的 Bash 脚本来完成;请注意,您可以通过ssh
. 例如:
svn export yourprojectpath /tmp/exportedproject
tar czf /tmp/yourproject.tgz /tmp/exportedproject
scp /tmp/myproject.tgz youruser@remotemachine:~/dev
## Remote commands are in the right hand side, between ''
ssh youruser@remotemachine 'tar xzf ~/dev/yourproject.tgz'
ssh youruser@remotemachine 'qsub ~/dev/yourproject/script.py'
为此,您当然需要在本地和远程计算机之间设置基于公钥/私钥的无密码登录。
如果你需要的不止这些,你可以考虑使用 Python 的Fabric或者更高级的菜式。