Статьи

Простая непрерывная доставка с ContinuousPHP и Zend Server

Подход с непрерывной доставкой направлен на то, чтобы сделать процесс непрерывного развертывания кода в рабочей среде безошибочным или, по меньшей мере, менее подверженным ошибкам, используя автоматизированные задачи, тесты, сборки и развертывания. Минимизируйте риск и время простоя, максимизируйте качество и ценность. Это девиз.

Непрерывная доставка

Однако этот процесс не всегда прост, если не сказать больше. Достаточно часто инструменты непрерывной доставки, выбранные для реализации непрерывной интеграции и развертывания, сложно определить и использовать, и они, как правило, требуют много времени и средств. Чем больше приложение, тем сложнее задача.

В этой статье представлен новый интересный подход к решению этой проблемы путем демонстрации процесса непрерывной доставки с использованием Continualphp и Zend Server.

Continualphp — это решение PaaS, которое позволяет легко спроектировать конвейер непрерывной доставки всего за несколько минут. Continuousphp будет синхронизироваться с вашими существующими репозиториями на GitHub (или Bitbucket и Stash) и обрабатывать все различные этапы непрерывного цикла доставки: предоставление, упаковка, тестирование и развертывание. Каждая новая фиксация, сделанная в вашем репозитории, будет продвигать ваш код по конвейеру, который вы создали (подробнее о Continualphp ).

Zend Server — это профессиональный PHP-стек Zend в комплекте с набором передовых инструментов для разработки, отладки, развертывания и мониторинга веб-приложений и мобильных приложений PHP (подробнее о Zend Server ).

Предпосылки

  • В процедуре, описанной в этом руководстве, используется скелетное приложение Zend Framework 2. Если вы хотите выполнить шаги, описанные ниже, клонируйте репозиторий .
  • Вам также понадобится работающий экземпляр Zend Server, чтобы завершить последний шаг в руководстве. Простой способ сделать это — использовать одно из различных облачных решений — Zend Server доступен на AWS, Azure, Google Cloud Platform, просто выберите. Все предлагают бесплатные пробные версии, так что это также дешевый способ начать.

Давайте начнем!

Шаг 1: Настройка вашего хранилища

Прежде чем вы запачкаете руки, вам нужно настроить репозиторий в ContinuousPHP.

Для этого перейдите на https://continuousphp.com и нажмите кнопку « Зарегистрироваться бесплатно» .

Для общедоступных проектов вы можете бесплатно использовать Continuphp столько, сколько хотите. Для частных проектов вы получаете 30 бесплатных сборок, после чего вы можете выбрать любой из предложенных планов .

Страница авторизации

Затем вам нужно будет указать Continualphp, с каким сервисом Git-репозитория вы хотите интегрироваться. Вы можете использовать GitHub или BitBucket (поддержка частных провайдеров, таких как Atlassian Stash, доступна по запросу).

Ввод учетных данных репо

После того, как вы ввели свои учетные данные, интеграция настроена, и Continualphp извлекает и отображает список всех ваших размещенных репозиториев.

Список репозитория

Нажмите кнопку « Настройка» справа для хранилища, для которого вы хотите настроить новый конвейер непрерывной доставки.
В этом случае мы будем использовать мой репозиторий скелетных приложений Zend Framework 2 .
Откроется новая страница проекта, которая в будущем покажет конвейер, который мы определили, и все выполненные сборки.

Настройка хранилища

Нажмите кнопку « Настроить репозиторий» , и «за кулисами» Continualphp добавит новый веб-хук в репозиторий для запуска новых сборок для каждого запроса push и pull, а также создаст новый ключ SSH, позволяющий Continualphp клонировать репозиторий при инициализации сборок. Вы должны получить электронное письмо от GitHub с уведомлением об этом новом ключе.

Страница проекта

Шаг 2. Создание нового конвейера развертывания

Теперь, когда ваш репозиторий настроен, пришло время определить новый конвейер развертывания непрерывной доставки.
Конвейер развертывания в Continuousphp разбивает процесс развертывания вашего приложения на параллельные процессы. Во-первых, ваш репо клонирован. Затем Continualphp предоставляет приложение и генерирует параллельно два отдельных пакета приложения — один для тестирования и один для развертывания.

Чтобы создать новый конвейер, просто нажмите значок +, как подсказывает слон непрерывного php.

Запуск нового трубопровода

Затем выберите начальную точку вашего конвейера, либо в конкретной ветке, либо для всех веток / тегов в случае производственного конвейера.

В этом случае основная ветвь будет отлично работать.

Выбор начальной точки

Далее, мы собираемся указать версию PHP, которую мы хотим использовать для того, чтобы обеспечить работу нашего приложения и выполнение тестов с помощью Continuousphp. Самое замечательное в том, что вы можете выбрать столько версий PHP, сколько захотите, и для каждой выбранной вами версии .php запускает тесты в отдельном контейнере.

Шаг 3: Настройка параметров сборки и тестирования

После того, как вы выберете свои версии PHP, конвейер развертывания будет сохранен, непрерывный php автоматически настроит все инструменты, существующие в репозитории (например, Composer), и отобразятся параметры конфигурации сборки. Следующим шагом является проверка и настройка этих параметров и параметров тестирования на следующей странице конвейера в соответствии с вашими предпочтениями и требованиями.

Конфигурации сборки

Конфигурации сборки позволяют вам определять учетные данные Amazon AWS для интеграции во время выполнения сборки, задачи Phing, запускаемые перед созданием пакета тестирования, и зависимости Composer.
У вас также есть возможность добавить HTTP-аутентификацию, чтобы позволить Composer получать доступ к частным репозиториям (например, в BitBucket) или получать зависимости от частного сервера Satis.

Настройки сборки

После того, как вы ознакомились с настройками сборки, нажмите кнопку Далее в нижней части страницы.

Тестовые конфигурации

Любая существующая конфигурация тестирования будет автоматически идентифицирована и отображена на странице настроек теста, но, конечно, вы также можете добавить новую платформу тестирования.

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

Настройки теста

Я собираюсь добавить PHPUnit в мой конвейер. Все, что мне нужно сделать, это ввести путь к тестовой конфигурации, в этом случае определенную по адресу: /module/Application/tests/phpunit.xml .

Добавление тестирования PHPUnit

Обратите внимание, что моя конфигурация тестирования имеет красный тег блокировки вверху. Этот тег означает, что функция блокирования включена и что любые неудачные тесты будут блокировать развертывание пакета — очень полезно, если вы не хотите, чтобы был загружен ошибочный код. Удаление тега позволяет развернуть сборку в состоянии предупреждения.

Вы также можете определить цели Phing для ваших платформ тестирования. Они полезны, если вы хотите выполнить задачу перед тестированием или для создания базы данных и вставки фиксаторов в случае функционального тестирования с такими фреймворками, как Behat.

Закончив настройку параметров тестирования, нажмите кнопку « Далее», чтобы перейти к следующему шагу.

Шаг 4. Упаковка и развертывание приложения

Чтобы завершить непрерывный цикл доставки, теперь мы собираемся настроить способ упаковки и развертывания приложения.
Continuousphp предлагает различные варианты развертывания, в том числе с использованием AWS CodeDeploy, но в этом случае мы выберем развертывание нашего приложения на Zend Server, работающем на AWS .

Zend Server предоставляет разработчикам PHP и DevOps доступ к профессиональному стеку Zend Server и к набору расширенных инструментов для разработки, отладки и мониторинга приложений, включая новую панель инструментов отладки — Z-Ray. Интеграция между smoothphp и Zend Server основана на Zend Server SDK , приложении CLI, которое взаимодействует с веб-API Zend Server.

Первое, что мы собираемся сделать, это выбрать тип упаковки Zend Server из доступных вариантов.
Приложения, развернутые на Zend Server, упакованы в файл .zpk (сжатый файл) и включают в себя все файлы приложения, сценарии развертывания и метаданные.

Выбор типа пакета

На этом этапе игры, без необходимости что-либо настраивать, любой коммит начнет непрерывный процесс интеграции. Это означает, что код клонируется из репозитория, и инициализация пакетов для тестирования и развертывания.
Оставив конвейер в его настроенном состоянии, теперь у нас остаются встроенные пакеты, которые мы можем получить с помощью API-интерфейса Continuousphp или SDK , но мы собираемся сделать еще один шаг вперед, определив цель для развертывания.

Нажав Далее , вы попадете на страницу настроек развертывания.

Добавление нового места назначения

Теперь нам нужно добавить и настроить новое целевое назначение для сборок. В разделе «Места назначения» нажмите значок + .
Введите URL-адрес Zend Server, на который вы развертываете, а также URL-адрес приложения (убедитесь, что URL-адрес сервера включает номер порта, который использует пользовательский интерфейс Zend Server — 10081 или 10082 для HTTPS).

Вам также нужно будет добавить имя и хэш ключа веб-API Zend Server, необходимого для аутентификации. Этот ключ может быть создан и получен с помощью пользовательского интерфейса Zend Server ( Администрирование | Ключи веб-API ).

И последнее, но не менее важное: установите флажок «включить развертывание для успешных сборок», чтобы включить развертывание.

Определение нового назначения Zend Server

Дополнительные требования

Последний шаг для определения Zend Server в качестве цели развертывания — добавление двух файлов в корневой каталог вашего хранилища. Эти два файла инструктируют Zend Server, как и что развертывать, и без них развертывание завершается неудачно.

deployment.xml

Этот файл дескриптора описывает и определяет всю необходимую информацию, необходимую для развертывания вашего приложения с использованием механизма развертывания Zend Server. В нем описывается приложение и указываются все предварительные условия и параметры, необходимые для успешного развертывания приложения.
Вот пример того, как может выглядеть простой файл deploy.xml:

 <?xml version="1.0" encoding="utf-8"?> <package version="1.0" xmlns="http://www.zend.com/server/deployment-descriptor/1.0"> <type>application</type> <name>My demo app</name> <summary>A ZF2 demo app</summary> <description>A ZF2 demo app for the ContinuousPHP article</description> <version> <release>1.0</release> </version> <appdir>data</appdir> <docroot>data</docroot> <dependencies> <required> <php> <min>5.5.26</min> </php> <extension> <name>pdo_mysql</name> </extension> <directive> <name>safe_mode</name> <equals>off</equals> </directive> <directive> <name>error_reporting</name> <equals><![CDATA[E_ALL & ~E_NOTICE]]></equals> </directive> </required> </dependencies> </package> 

Обратите внимание, что в этом примере Zend Server сообщает, какая версия PHP требуется приложению, какие расширения необходимо загрузить и значение для директив php.ini .

deployment.properties

Этот файл сообщает непрерывному php, какие файлы включать в пакет, и расположение различных сценариев развертывания. Если вы хотите исключить большие папки в пакете, это место, где это нужно сделать.
Вот пример того, как выглядит файл deploy.properties:

 appdir.includes = config,\ data,\ module,\ public,\ vendor,\ composer.json,\ composer.lock,\ continuousphp.package,\ init_autoloader.php,\ LICENSE.txt,\ README.md 

## Шаг 5: проталкивание кода вниз по конвейеру
Это оно! Ваш непрерывный трубопровод доставки завершен. Начиная с этого момента, любой коммит, включая объединенные запросы, инициирует новую сборку. Ваш код будет проходить через все различные этапы от клонирования от репозитория до упаковки, тестирования и в конечном итоге развертывания на цели, которую вы выбрали и определили.

Вы можете просмотреть различные этапы конвейера, выбрав сборку на странице своего проекта. Затем вы можете увидеть снимки различных этапов по мере их обработки и выполнения.

Новые сборки в конвейере

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

Неудачные сборки

Если все идет хорошо с процессом развертывания, вы все время будете видеть зеленые огни, и в конечном итоге ваш новый код будет развернут на Zend Server. Удобно, что вам не нужно создавать виртуальный хост на Zend Server — Continualphp позаботится об этом автоматически.

Откройте пользовательский интерфейс Zend Server, используя тот же URL-адрес, который вы использовали для определения места назначения развертывания, и перейдите на страницу «Управление приложениями» ( Приложения | Управление приложениями ).

Приложение, развернутое на Zend Server

Разумеется, после развертывания на Zend Server вы можете начать использовать все доступные функции для разработки, отладки и мониторинга своего приложения.

Резюме

Двойное обещание скорости и качества, сопровождающее подход Continuous Delivery, объединяет все больше и больше команд разработчиков. Но для разработчиков задача полного понимания того, что означает Непрерывная интеграция, чем она отличается от процесса непрерывного развертывания и как они оба могут вписаться в цикл непрерывной доставки, может быть сложной.

Непрерывный php может быть хорошим способом для разработчиков PHP начать работу. В то время как существует множество платформ непрерывной доставки, немногие полностью сосредоточены на PHP. Решение, предлагаемое Continualphp, поддерживает методологии и инструменты, используемые разработчиками PHP, и упрощает их интеграцию в простой в управлении, полностью прозрачный и надежный конвейер доставки.

Больше вкусностей

Вот некоторые дополнительные ресурсы, которые могут помочь вам понять решение, предлагаемое Continualphp, и как настроить Zend Server:

Надеюсь, вам понравилось чтение!