Na podstawie sformułowania pytania zakładam, że masz komputer lokalny i komputer zdalny, na którym aktualizujesz dwa pliki - skrypt Python i skrypt Bash. Oba pliki są pod kontrolą SVN, a oba komputery mają dostęp do tego samego serwera SVN.
Przykro mi, ale nie mam żadnych porad dotyczących twojego systemu grid, ale pozwól mi wymienić kilka ogólnych punktów, które uznałem za ważne dla każdego wdrożenia.
Ogranicz zmiany produkcyjne do zmian konfiguracji . Piszesz, że musisz „użyć ścieżki zestawów danych na serwerze”; brzmi to dla mnie tak, jakby ścieżki były zapisane na stałe w skrypcie Python. To nie jest dobry pomysł, właśnie dlatego, że będziesz musiał zmienić te ścieżki na każdej innej maszynie, do której przenosisz skrypt. Jeśli zatwierdzisz te zmiany z powrotem do SVN, to na komputerze lokalnym będziesz mieć ścieżki zdalne, i tak dalej i dalej ... (Co jeśli nie będą tylko ścieżki, ale także hasła? Nie powinieneś mieć haseł produkcyjnych w SVN serwer.)
Dlatego przechowuj ścieżki i inne informacje dotyczące instalacji w .ini
pliku i użyj ConfigParser, aby go odczytać, lub użyj .json
pliku i użyj modułu json . Zachowaj jedną kopię pliku lokalnie i jedną zdalnie, obie pod tą samą ścieżką, obie bez kontroli SVN, i po prostu zachowaj ścieżkę do tego pliku konfiguracyjnego w skrypcie Python (lub pobierz go z wiersza poleceń, jeśli nie możesz zachować obu konfiguracje pod tą samą ścieżką).
Utrzymuj konfigurację tak małą, jak to możliwe . Każda konfiguracja jest „ruchomą częścią” aplikacji, a każdy system jest bardziej niezawodny, tym mniej ma ruchomych części. Dobrym wskaźnikiem czegoś, co należy do konfiguracji jest to, że musisz ją edytować za każdym razem, gdy przenosisz kod; rzeczy, które nie wymagały edycji, mogą pozostać stałymi w kodzie.
Zautomatyzuj wdrażanie . Możesz to zrobić za pomocą skryptu Bash na komputerze lokalnym; pamiętać, że można uruchomić dowolne polecenie na komputerze zdalnym poprzez ssh
. Na przykład:
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'
Aby to zadziałało, musisz oczywiście mieć login bez hasła , oparty na kluczach publicznych / prywatnych, skonfigurowany między komputerem lokalnym a komputerem zdalnym.
Jeśli potrzebujesz czegoś więcej, możesz pomyśleć o użyciu tkaniny Python lub kuchni wyższego poziomu .