Pull to refresh

Интеграция shared hosting и SVN

Reading time2 min
Views1.1K
Этот скрипт более исследовательский, чем предназначен для серьезных групп разработчиков. Создавался мною чтобы изучить python получше. Но тем не менее, я успешно пользуюсь им более полугода.

Данная статья для тех разработчиков, которые ведут некоторый проект в SVN, имея удаленный сервер, доступ к которому есть по ftp и ssh, но устанавливать на который ничего нельзя.

схема деплоя


Схема деплоя у меня очень простая — я просто обновляю файлы на удаленном сервере. Именно это и реализовано с помощью скрипта.

Разработчик закрепляет код в хранилище. После этого запускается (автоматически или вручную) скрипт на питон, который загружает обновленные файлы на сервер и удаляет старые. У меня скрипт запускается автоматически, благодаря тому, что я использую БилдСервер CruiseControl (java), который наблюдает за хранилищем и позволяет мне выполнять некоторые события, увидев, что в хранилище появилась более новая версия кода.
Требования к окружению
  1. Сервер в локальной сети
    • хранилище SVN, svn.exe добавлен в PATH
    • установленный python 2.5, python.exe добавлен в PATH
    • доступ к SSH. У меня есть урезанная версия cygwin, на которой есть фактически только ftp+ssh, поэтому буду рассчитывать что и у вас она есть.

  2. Удаленный сервер
    • подняты ssh, ftp
    • нет возможности установить сторонний софт

  3. В папке сервера C:\Program Files\CruiseControl\projects\project1 хранится рабочая копия кода, синхронизированная с той, что на production сервере. То есть фактически, совпадает код на production сервере и в этой папке.
  4. Скрипт находится по пути C:\svn\apply_svn_changes\publish_web_site.py
  5. У пользователя из под которого вы запускаете скрипт есть права выходить в интернет по ftp и ssh, а так же запускать файлы на данном сервере.
  6. Сайт на 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 ./[...] (это дурацкий нарост на общей гладкости системы, хак, но мне пришлось пойти на него).
Tags:
Hubs:
Total votes 9: ↑5 and ↓4+1
Comments6

Articles