A partir de la redacción de su pregunta, supongo que tiene una máquina local y una máquina remota donde actualiza dos archivos: un script de Python y un script de Bash. Ambos archivos están bajo el control de SVN y ambas máquinas tienen acceso al mismo servidor SVN.
Lamento no tener ningún consejo específico para su sistema de red, pero permítanme enumerar algunos puntos generales que he encontrado importantes para cualquier implementación.
Mantenga los cambios de producción limitados a los cambios de configuración . Escribe que tiene que "usar la ruta de los conjuntos de datos en el servidor"; Esto me parece que tienes los caminos codificados en tu script de Python. Esta no es una buena idea, precisamente porque necesitará cambiar esas rutas en cualquier otra máquina a la que mueva el script. Si devuelve esos cambios a SVN, entonces en su máquina local tendrá las rutas remotas, y así sucesivamente ... (¿Qué pasa si no solo hay rutas, sino también contraseñas? No debería tener contraseñas de producción en un SVN servidor.)
Por lo tanto, mantenga las rutas y otra información de configuración en un .ini
archivo y use ConfigParser para leerlo, o use un .json
archivo y use el módulo json . Mantenga una copia del archivo localmente y una remotamente, ambas bajo la misma ruta, ambas sin control SVN, y simplemente mantenga la ruta a ese archivo de configuración en el script de Python (u obténgala de la línea de comando si no puede mantener ambas configuraciones bajo la misma ruta).
Mantenga la configuración lo más pequeña posible . Cualquier configuración es una "parte móvil" de su aplicación, y cualquier sistema es más robusto cuanto menos partes móviles tenga. Un buen indicador de algo que pertenece a la configuración es exactamente que tiene que editarlo cada vez que mueve el código; las cosas que no han necesitado edición pueden permanecer como constantes en el código.
Automatiza tu despliegue . Puede hacerlo a través de un script Bash en su máquina local; en cuenta que puede ejecutar cualquier comando en una máquina remota a través ssh
. Por ejemplo:
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'
Para que esto funcione, debe tener un inicio de sesión sin contraseña , basado en claves públicas / privadas, configurado entre su máquina local y la remota.
Si necesita más que esto, puede pensar en usar la tela de Python o la cocina de alto nivel .