Pela redação da sua pergunta, presumo que você tenha uma máquina local e uma máquina remota onde atualiza dois arquivos - um script Python e um script Bash. Ambos os arquivos estão sob controle SVN e ambas as máquinas têm acesso ao mesmo servidor SVN.
Lamento não ter nenhum conselho específico para o seu sistema de grade, mas deixe-me listar alguns pontos gerais que considero importantes para qualquer implantação.
Mantenha as alterações de produção limitadas às alterações na configuração . Você escreve que precisa "usar o caminho dos conjuntos de dados no servidor"; isso me parece que você tem os caminhos codificados no seu script Python. Essa não é uma boa ideia, precisamente porque você precisará alterar esses caminhos em todas as outras máquinas para as quais move o script. Se você confirmar essas alterações no SVN, na máquina local, você terá os caminhos remotos e assim por diante ... (E se houver não apenas caminhos, mas também senhas? Você não deve ter senhas de produção em um SVN servidor.)
Portanto, mantenha os caminhos e outras informações de configuração em um .ini
arquivo e use o ConfigParser para lê-lo ou use um .json
arquivo e use o módulo json . Mantenha uma cópia do arquivo localmente e uma remotamente, ambas no mesmo caminho, ambas sem controle SVN, e apenas mantenha o caminho para esse arquivo de configuração no script Python (ou obtenha-o na linha de comando, se você não puder manter os dois configurações no mesmo caminho).
Mantenha a configuração o menor possível . Qualquer configuração é uma "parte móvel" do seu aplicativo e qualquer sistema é mais robusto quanto menos partes móveis. Um bom indicador de algo que pertence à configuração é exatamente o de que você precisa editá-lo sempre que mover o código; coisas que não precisaram de edição podem permanecer como constantes no código.
Automatize sua implantação . Você pode fazer isso através de um script Bash na sua máquina local; observe que você pode executar qualquer comando em uma máquina remota através de ssh
. Por exemplo:
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 isso funcione, é claro que você precisa ter um login sem senha , com base em chaves públicas / privadas, configurado entre a máquina local e a remota.
Se você precisar de mais do que isso, pense em usar o Python's Fabric ou a culinária de nível superior .