Питон →
Интеграция shared hosting и SVN
Этот скрипт более исследовательский, чем предназначен для серьезных групп разработчиков. Создавался мною чтобы изучить python получше. Но тем не менее, я успешно пользуюсь им более полугода.
Данная статья для тех разработчиков, которые ведут некоторый проект в SVN, имея удаленный сервер, доступ к которому есть по ftp и ssh, но устанавливать на который ничего нельзя.
Схема деплоя у меня очень простая — я просто обновляю файлы на удаленном сервере. Именно это и реализовано с помощью скрипта.
Разработчик закрепляет код в хранилище. После этого запускается (автоматически или вручную) скрипт на питон, который загружает обновленные файлы на сервер и удаляет старые. У меня скрипт запускается автоматически, благодаря тому, что я использую БилдСервер CruiseControl (java), который наблюдает за хранилищем и позволяет мне выполнять некоторые события, увидев, что в хранилище появилась более новая версия кода.
Требования к окружению
Скрипт запускатся из консоли так:
Скрипт смотрит в папку «C:\Program Files\CruiseControl\projects\project1\source», где узнает текущую версию кода, версию кода в хранилище. Он сравнивает их, узнавая какие файлы и папки следует удалить, а какие — закачать заново или создать. Это делается с помощью команды
Скрипт открывает план, коннектится по ftp к указанному серверу и начинает план исполнять.
После чего отключается. Все изменения пишет в лог.
Основной код на pastebin, весь скрипт на depositfiles.
Попробуйте так же запустить скрипт с ключом --help
1. ssh нужен лишь для того, чтобы осуществить удаление папок с сервера с помощью
Данная статья для тех разработчиков, которые ведут некоторый проект в SVN, имея удаленный сервер, доступ к которому есть по ftp и ssh, но устанавливать на который ничего нельзя.
Схема деплоя у меня очень простая — я просто обновляю файлы на удаленном сервере. Именно это и реализовано с помощью скрипта.
Разработчик закрепляет код в хранилище. После этого запускается (автоматически или вручную) скрипт на питон, который загружает обновленные файлы на сервер и удаляет старые. У меня скрипт запускается автоматически, благодаря тому, что я использую БилдСервер CruiseControl (java), который наблюдает за хранилищем и позволяет мне выполнять некоторые события, увидев, что в хранилище появилась более новая версия кода.
Требования к окружению
- Сервер в локальной сети
- хранилище SVN, svn.exe добавлен в PATH
- установленный python 2.5, python.exe добавлен в PATH
- доступ к SSH. У меня есть урезанная версия cygwin, на которой есть фактически только ftp+ssh, поэтому буду рассчитывать что и у вас она есть.
- Удаленный сервер
- подняты ssh, ftp
- нет возможности установить сторонний софт
- В папке сервера C:\Program Files\CruiseControl\projects\project1 хранится рабочая копия кода, синхронизированная с той, что на production сервере. То есть фактически, совпадает код на production сервере и в этой папке.
- Скрипт находится по пути C:\svn\apply_svn_changes\publish_web_site.py
- У пользователя из под которого вы запускаете скрипт есть права выходить в интернет по ftp и ssh, а так же запускать файлы на данном сервере.
- Сайт на production сервере находится в папке web/project относительно домашней папки ftp.
Скрипт запускатся из консоли так:
> python C:\svn\apply_svn_changes\publish_web_site.py -c "C:\Program Files\CruiseControl\projects\project1\source" --host ftp_user@production.com -p ftp_password -d sites/ms
Скрипт смотрит в папку «C:\Program Files\CruiseControl\projects\project1\source», где узнает текущую версию кода, версию кода в хранилище. Он сравнивает их, узнавая какие файлы и папки следует удалить, а какие — закачать заново или создать. Это делается с помощью команды
svn diff
. После этого он составляет план выполнения задач, сохраняя план во временной папке.Скрипт открывает план, коннектится по ftp к указанному серверу и начинает план исполнять.
После чего отключается. Все изменения пишет в лог.
Основной код на pastebin, весь скрипт на depositfiles.
Попробуйте так же запустить скрипт с ключом --help
python "C:\svn\apply_svn_changes\publish_web_site.py" --help
1. ssh нужен лишь для того, чтобы осуществить удаление папок с сервера с помощью
rm -rf ./[...]
(это дурацкий нарост на общей гладкости системы, хак, но мне пришлось пойти на него).
01.12.2009 16:43+0300