Использование Phing для деплоя и не только

13.04.2014

Работая над проектом, практически всегда нужно, что-то дорабатывать или править баги, после того, как он уже залит на сервер. Можно для этого использовать настройки IDE и руками или при коммите деплоить измененные данные не сервер, можно делать обновление из репозитория по ssh, но все эти варинты требуют нескольких действий, добавим к этому ещё и применение миграций или создание каких-то папок.Вот было бы круто нажав на 1 кнопку выполнить всё это разом! - Вот тут как раз и появляется сборщик проектов Phing.

P.s.: Заранее извиняюсь что код будет вставлен картинками, т.к. редактор экранирует весь xml-код(под изображением будет ссылка на норм. код)

Использование Phing для деплоя приложений

Придумываем алгоритм

Ничего особенно нового выдумывать не будем, а сделаем такую последовательность действий при запуске сборщика:

  1. Подключаемся к удаленному серверу по ssh
  2. Переходим в нужную директорию
  3. Выполняем обновление из репозитория
  4. Запускаем миграции

Это самый просто алгоритм, необходимый для выполнения деплоя. Кроме этого можно добавить перед деплоем: запустить тесты, после деплоя обновить composer и т.п.

Инструменты

Итак, пускай у нас есть какой-то проект в гите, который мы и будем деплоить на сервер.

Первое, что нужно сделать - настроить PhpStorm, а для этого: открываем проект локально, заходим в Settings -> Phing -> Click here to download latest…

Настройка Phing в PhpStorm

Скачиваем phing в удобную директорию, поле Path to Phing executable должно измениться на соответствующий путь.

Далее в директории проекта создаем файл build.xml, со следующим содержимым:

Phing build-файлПосле этого, кликаем правой кнопкой по файлу и выбираем Add as Phing Build File, справа должна появиться панель Phing Build, пока она будет пустой, т.к. у нас ещё нет задач в файле build.xml:

Phing Build panel

На этом подготовительная часть закончена, осталось только дать задания phing’у на выполнения определенного алгоритма, а также создать и добавить rsa-ключ в наш гит репозиторий (т.к. мы будем работать с git в консоли, и не можем ввести пароль от репы).

Скрипт деплоя

Ниже приведу скрипт деплоя, из названий элементов и атрибутов и так всё становится ясно:

XML-скрипт билда

(вот ссылка на нормальный код - https://github.com/neo-classic/Temp/blob/master/build.xml)

Из скрипта выше видно, что обновление происходит обычными консольными командами, но кроме этого вместе с фингом идут готовые задачи на обновление с использованием сразу гита или свн (http://www.phing.info/docs/master/webhelp/GitPullTask.html) + много чего дополнительного, да хоть по ftp деплоить, всё это можно почитать в документации.

Запускаем

Косяк номер 1) Запуская финг, видим следующую ошибку: To use SshTask, you need to install the PHP SSH2 extension.

Т.к. я работаю в linux, просто установлю libssh2-php, по этой статье - http://programster.blogspot.ru/2013/11/ubuntu-12-install-ssh2-extension.html.

Косяк номер 2) Запускаем и ждём, ждём, ждём…. и ничего не происходит, потому что при выполнении команды git pull требуется пароль. Вот и пришло время сгенерировать rsa ключ, для этого заходим на сервер и выполняем команду:

ssh-keygen -t rsa

Она генерирует 2 ключа:

Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub

Нам понадобится публичный, т.к. я пользуюсь bitbucket, будем добавлять публичный ключ в Настройки -> Ключи развертывания (подробнее здесь: https://confluence.atlassian.com/pages/viewpage.action;jsessionid=1B434DB1DDEBD32FE2E89260B1D734DC?pageId=270827678).

Не забываем что, если вы уже клонировали на сервер репу по https, то нужно будет сделать это уже по-новой, но через ssh. Это всё написано в последней ссылке на документацию. Вот что выдала нам консоль выполнения билда:

Результат выполнения сборки

На этом всё! теперь накодив тонну кода за день и запушив её в репу, вы делаете деплой одним кликом прям в шторме!

В комментах делимся идеями или опытом использования данного инструмента.

Ссылки

http://www.phing.info/ - сам Phing

http://www.lornajane.net/posts/2011/idiot-proof-deployment-with-phing - пример деплоя через ftp

http://www.youtube.com/watch?v=yqXNKJ9ecyk - использование Phing в PhpStorm

https://confluence.atlassian.com/pages/viewpage.action;jsessionid=1B434DB1DDEBD32FE2E89260B1D734DC?pageId=270827678 - документация по созданию ключа и работе с ним для BitBucket

http://programster.blogspot.ru/2013/11/ubuntu-12-install-ssh2-extension.html - установка ssh2 php в linux

Похожие статьи:

blog comments powered by Disqus
Наверх