З формулювання вашого запитання я припускаю, що у вас є локальна машина та віддалена машина, де ви оновлюєте два файли - скрипт 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 або кухні вищого рівня .