В последнее время в посещаемых мною форумах и конференциях часто всплывает тема деплоя php-приложений на production-сервер. Я решил поделиться собственным рецептом.
В распоряжении имеется:
- svn-репозитарий с проектом.
- ftp-доступ к рабочему серверу.
- установленный и готовый к тяжёлой рутине phing
Сценарий работ следующий:
- Сделать экспорт кода из svn
- Подготовить его к загрузке (например убрать комментарии, “склеить” мелкие в один большой, удалить лишнее и т.п.)
- Проверить на наличие ошибок (они могли попасть в репозитарий или образоваться на предыдущем шаге)
- Закачать полученное на рабочий сервер.
Всё вроде бы просто, но смущает один момент – экспорт всего и вся. Со времени последнего обновления на сервере в репозитарии обновились 3 файла, а экспортировать нужно всё? Никак нет! Экспортировать будем только то, что изменилось. То есть первый шаг сценария будет выглядеть так:
- Получить последнюю версию проекта на сервере – RevFrom
- Получить последнюю версию проекта в репозитарии – RevTo
- Экспортировать файлы, которые изменились или добавились c RevFrom до RevTo
Версию рабочего проекта, не мудрствуя лукаво, предлагаю хранить в текстовом файле. Например revision.txt. Версию проекта в репозитарии поможет узнать SvnLastRevisionTask. Неясным остался лишь момент – каким образом выяснить какие файлы изменились. Те, кто пользовались TortoiseSVN наверняка знают о чудесной его возможности – сравнить две ревизии и экспортировать “разницу”. Но svn в чистом виде такой возможности не предоставляет. Так что пришлось немного поработать.
(more…)
