Подход с непрерывной доставкой направлен на то, чтобы сделать процесс непрерывного развертывания кода в рабочей среде безошибочным или, по меньшей мере, менее подверженным ошибкам, используя автоматизированные задачи, тесты, сборки и развертывания. Минимизируйте риск и время простоя, максимизируйте качество и ценность. Это девиз.
Однако этот процесс не всегда прост, если не сказать больше. Достаточно часто инструменты непрерывной доставки, выбранные для реализации непрерывной интеграции и развертывания, сложно определить и использовать, и они, как правило, требуют много времени и средств. Чем больше приложение, тем сложнее задача.
В этой статье представлен новый интересный подход к решению этой проблемы путем демонстрации процесса непрерывной доставки с использованием 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
.
Обратите внимание, что моя конфигурация тестирования имеет красный тег блокировки вверху. Этот тег означает, что функция блокирования включена и что любые неудачные тесты будут блокировать развертывание пакета — очень полезно, если вы не хотите, чтобы был загружен ошибочный код. Удаление тега позволяет развернуть сборку в состоянии предупреждения.
Вы также можете определить цели 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, как и что развертывать, и без них развертывание завершается неудачно.
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 вы можете начать использовать все доступные функции для разработки, отладки и мониторинга своего приложения.
Резюме
Двойное обещание скорости и качества, сопровождающее подход Continuous Delivery, объединяет все больше и больше команд разработчиков. Но для разработчиков задача полного понимания того, что означает Непрерывная интеграция, чем она отличается от процесса непрерывного развертывания и как они оба могут вписаться в цикл непрерывной доставки, может быть сложной.
Непрерывный php может быть хорошим способом для разработчиков PHP начать работу. В то время как существует множество платформ непрерывной доставки, немногие полностью сосредоточены на PHP. Решение, предлагаемое Continualphp, поддерживает методологии и инструменты, используемые разработчиками PHP, и упрощает их интеграцию в простой в управлении, полностью прозрачный и надежный конвейер доставки.
Больше вкусностей
Вот некоторые дополнительные ресурсы, которые могут помочь вам понять решение, предлагаемое Continualphp, и как настроить Zend Server:
- непрерывная документация
- Введение в непрерывную доставку
- Как запустить Zend Server на AWS
- Начало работы с Zend Server в Azure
- Документация Zend Server
Надеюсь, вам понравилось чтение!