Pull to refresh

Быстрое обновление проектов на клиентских серверах через FTP

Reading time2 min
Views4.6K

Задача


Часто приходится сталкиваться с долгосрочными проектами, которые требуют разработки на тестовом сервере под Linux, и после проверки клиентом — обновления кода на его сервере. Разумеется, имеет смысл использовать систему контроля версий (мы используем SVN), и когда есть доступ к клиентскому серверу через SSH — достаточно сделать например команду svn update или svn checkout.

Проблема


Однако, когда к клиентскому серверу есть доступ только по FTP — приходится заливать обновления вручную, используя одну из альтернатив:
— копировать по FTP все файлы проекта, чтобы ничего не упустить
— составлять список файлов которые были изменены с момента предыдущего релиза, и заливать только их.

Решение


Хочу поделиться решением, которое позволяет автоматизировать этот процесс, и производить обновление проекта на клиентском сервере простым запуском скрипта на вашем dev-сервере. Для этого предлагается написать простенький Shell скрипт, который будет выполнять следующее:
1) Экспортировать код проекта из системы контроля версий
2) Обновлять код проекта на клиентском сервере


Решение первой задачи предельно простое:
#удаление папки содержащей старый релиз
rm -r /home/project/release_folder/
#експорт кода проекта в папку релиза
svn export --force http//svn.yourserver.com/repositary_name /home/project/release_folder/


При этом, естественно, в зависимости от используемой системы контроля версий, можно задавать параметры, например чтобы выложить в релиз определенную ревизию.

Для решения второй задачи можно воспользоваться командой lftp, которая обладает большим набором параметров и позволяет производить обширные манипуляции с файлами посредством протокола ftp:

#синхронизация папки с релизом с папкой на удаленном сервере клиента
lftp -f sync_script.x

Содержимое файла sync_script.x:
open login:password@customerserver.com
mirror -c -e -R -X '*.config.php' --no-perms /home/project/release_folder htdocs/sub
exit


Как видим, данная команда позволяет создавать точное зеркало папки с релизом на удаленном клиентском сервере. При этом мы можем, например, используя её параметры, запретить обновление определенных файлов, или изменение прав доступа к файлам на удаленном сервере.

Сделав такой скрипт на своем сервере, достаточно запустить его, и подождать пару секунд, пока он обновит папку релиза и синхронизирует ее содержимое с клиентским сервером по FTP. Это здорово экономит время и нервы + исключает “человеческий фактор”. Расширив этот скрипт, можно обновлять проект хоть на сотне серверов, всего за пару минут.
Tags:
Hubs:
Total votes 9: ↑7 and ↓2+5
Comments4

Articles