根据问题的措辞,我假设您有一台本地计算机和一台远程计算机,在其中更新两个文件-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或更高级的菜式。