Из формулировки вашего вопроса я предполагаю, что у вас есть локальный компьютер и удаленный компьютер, на котором вы обновляете два файла - скрипт 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's Fabric или кухне более высокого уровня .