Настройка цикла развертывания / сборки / CI для проектов PHP

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

То, что я делаю прямо сейчас, у меня есть локальная тестовая среда для каждого проекта; Я использую SVN для каждого проекта; изменения проверяются локально, а затем переносятся в онлайн-версию, как правило, через FTP. Документация API создается вручную из исходного кода; Единичные тесты – это то, что я получаю медленно, и это еще не часть моей повседневной жизни.

«Цикл сборки», который я предвижу, будет делать следующее:

  • После того, как был протестирован локально, набор изменений проверяется в SVN.

  • Я начинаю процесс сборки. Версия SVN HEAD проверяется, модифицируется, если необходимо, и готовится к загрузке.

  • Документация API автоматически генерируется – если я еще не установил ее подробно, используя шаблон по умолчанию, просматривая всю базу кода.

  • Новая ревизия развертывается в удаленном месте через FTP (включая некоторые переименования каталогов, chmodding, импорт баз данных и т. Д.) Это то, что мне уже очень нравится phing , но я открыт для альтернатив, конечно.

  • Запускаются модульные тесты, находящиеся в предопределенном месте. Мне сообщили об их неудаче или успехе, используя E-Mail, RSS или (желательно) вывод HTML, который я могу захватить и разместить на веб-странице.

  • (необязательно) текстовый файл «changelog» конечного пользователя в предварительно определенном местоположении обновляется с заранее определенной частью сообщения фиксации («Теперь можно фильтровать как« foo », так и« bar »в то же самое время время). Это сообщение не обязательно совпадает с сообщением о передаче SVN, которое, вероятно, содержит гораздо больше внутренней информации.

  • Такие вещи, как метрики кода, проверка стиля кода и т. Д., Сейчас не являются моей основной задачей, но в конечном итоге они, безусловно, будут. Решения, которые приносят эту «из коробки», очень любезно смотрятся.

я ищу

  • Обратная связь и опыт людей, которые были или были в подобной ситуации, и успешно внедрили решение для этого

  • В частности, хорошие пошаговые руководства и пошаговые инструкции по настройке

  • Решения, обеспечивающие максимально возможную автоматизацию , например, путем создания API-интерфейса скелета, тестовых примеров и т. Д. Для каждого нового проекта.

а также

  • Рекомендации по продукту . До сих пор я знаю phing / ant для построения, phpUnderControl или Hudson для части отчета. Мне все они нравятся, насколько я могу судить, но я, конечно, не разбираюсь с ними.

Я заботился о работе, поэтому у меня есть сильная склонность к простым решениям. С другой стороны, если функция отсутствует, я буду кричать, что она слишком ограничена. Решения «точка-и-клик» приветствуются. Я также предлагаю рекомендации по коммерческим продуктам, которые могут работать с проектами PHP.

Моя настройка

Я работаю на Windows локально (7, если быть точным), и большинство клиентских проектов запускаются в стек LAMP, часто на общем хостинге (= нет удаленного SSH). Я ищу решения, которые я могу запустить в своей собственной среде. Я готов настроить виртуальную машину Linux для этого, без проблем. Хостинговые решения интересны для меня, только если они предоставляют все описанные аспекты или достаточно гибки для взаимодействия с другими частями процесса.

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

    Я прошел через buildbot , CruiseControl.net , CruiseControl и Hudson . Все, хотя мне очень понравился CruiseControl *, это было слишком много хлопот с действительно сложными случаями зависимости. buildbot нелегко настроить, но у него хорошая аура (мне просто нравится python, вот и все). Но Хадсон выиграл первые три, потому что:

    1. Его просто настроить
    2. Легко настроить
    3. Он выглядит неплохо и имеет хорошую обзорную функциональность
    4. Он получил обновления «точка-и-клик», для себя и всех установленных плагинов. Это действительно приятная функция, что я все больше ценю

    Caveat: Я только использовал linux в качестве базы для вышеупомянутых серверов сборки (CC.net работал на моно ), но все они должны – в соответствии с межплатформенной платформой docs.

    Настройка hudson-сервера

    Предпосылки:

    • Java (1.5 будет вам просто отлично)
    • Читайте доступ к серверу subversion (у меня есть отдельная учетная запись для пользователя hudson)

    Отсюда просто:

    java -jar hudson.war 

    Это будет запускать небольшой экземпляр сервера сразу с вашей консоли, и вы должны иметь возможность просматривать установку на вашем http://localhost:8080 , если у вас нет чего-либо еще на этом порту заранее (вы можете указать другое порт путем передачи --httpPort=ANOTHER_HTTP_PORT для указанной выше команды), и все прошло хорошо в процессе установки.

    Если вы перейдете в каталог доступных плагинов ( http://localhost:8080/pluginManager/available ), вы найдете плагины для поддержки ваших вышеупомянутых задач (поддержка subversion устанавливается по умолчанию).

    Если у вас есть аппетит, вы должны установить сервер приложений Java, например, tomcat или причал . Инструкции по установке доступны для всех основных серверов приложений

    Обновление : Kohsuke Kawaguchi построил программу установки Windows для hudson

    Настройка проекта в hudson

    Ссылки в следующем прохождении предполагают запущенный экземпляр hudson, расположенный по адресу http://localhost:8080

    1. Выберите новое задание ( http://localhost:8080/view/All/newJob ) в меню слева
    2. Дайте задание имя и отметьте Build a free-style software project в списке
    3. Нажатие «ok» приведет вас к странице конфигурации задания. У всех вариантов есть небольшой вопросительный знак, кроме них. Нажав на это, вы получите текст справки об этом параметре.
    4. В группе параметров «Управление исходными кодами» вы будете использовать Subversion. Хадсон принимает как доступ к url, так и доступ к локальному модулю
    5. В группе параметров «Build Triggers» вы должны использовать «Poll SCM». Используемый здесь синтаксис – это cron, поэтому опрос репозитория subversion каждые 5 минут будет */5 * * * *
    6. Процесс создания проекта указывается в группе параметров «Построить». Если у вас уже есть файл сборки муравьев со всеми целями, которые вам нужны, вам повезло. Просто выберите «Invoke ant» и напишите имя цели. Группа опций поддерживает команды maven и shell также из коробки, но есть также плагин, доступный для phing .
    7. Отметьте дополнительные действия по сборке в «Действиях после сборки», например уведомления по электронной почте или архивирование артефактов сборки.

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

    Ловушки:

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

    Удачи!

    Термин, который вы ищете, – это «непрерывная интеграция».

    Вот пример того, кто использует GIT + phpundercontrol: http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/

    CruiseControl (который является сервером CI), может использовать Hosted SVN / GIT в качестве источника. Поэтому вы можете даже использовать его с GitHub или Beanstalk или с чем-то еще.

    Затем вы можете интегрировать это со следующим программным обеспечением:

    • PHPUnit
    • PHP-codesniffer
    • PhpDocumentor
    • PHP Gcov
    • PHPXref
    • Yasca
    • и т.п.

    Вы также можете попробовать этот размещенный CI: http://www.php-ci.net/hosting/create-project

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

    Вы также думали о управлении проектами и управлении исправлениями?

    Вы можете использовать Redmine для управления проектами. Он интегрировал поддержку непрерывной интеграции, но только как клиентскую сторону (а не как сервер CI).

    Попробуйте использовать размещенный SVN / GIT / и т. Д. потому что они будут охватывать ваши резервные копии и поддерживать работу своих серверов, поэтому вы можете сосредоточиться на разработке.

    Для учебника по настройке Хадсона см .: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/

    Я использую сервер непрерывной интеграции Atlasian Bamboo для моего основного проекта PHP (наряду со своими другими продуктами, такими как fisheye (просмотр репозитория), jira (трекер ошибок ) и клевер (покрытие кода)).

    Он поддерживает SVN и теперь поддерживает Git и обладает отличным пользовательским интерфейсом. Он доступен для linux, windows и mac и может работать автономно на собственном сервере tomcat, который отлично подходит для людей (таких как я), которым не нравится принимать дни, чтобы настроить свои инструменты). Хотя это может показаться дорогим, будучи одиноким разработчиком, я приобрел лицензию стартового комплекта на 10 $ (10 $ по программному обеспечению). Это отлично подходит для небольших команд, и это стоит того взгляда.

    PHPTesting PHPCI Это хороший сервер непрерывной интеграции, встроенный в php.

    Кроме того, его бесплатный и открытый источник. 🙂

    у него есть количество плагинов ..

    PHPCI включает в себя плагины интеграции для:

    • Atoum
    • Behat
    • Костер
    • Codeception
    • Композитор
    • Эл. адрес
    • хрюкать
    • IRC
    • PHP
    • корпия
    • MySQL
    • PDepend
    • PostgreSQL
    • Устранение PHP-кода
    • Детектор PHP / Вставить
    • PHP Spec
    • Блок PHP
    • Команды оболочки
    • Tar / Zip

    Я в основном администратор sys, но иногда я также программирую PHP. В качестве побочного проекта я создал несколько сценариев, которые сделают простым и безболезненным создание полноценной среды PHP CI с использованием Jenkins. Он также запускает образец проекта для вас, чтобы вы могли видеть, как настроен каждый шаг сборки.

    Если вы хотите попробовать все, что вам нужно, это окно Debian / Ubuntu и доступ к оболочке.

    http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci

    Обновление Чтобы добавить некоторый контент в мой ответ:

    Вы можете просто настроить Jenkins CI для PHP с помощью Ansible. Так как v1.4 поддерживает роли, которые вы можете скачать со своего сайта galaxy.ansibleworks.com, и он сделает тяжелую работу для вас. Он называется jenkins-php .

    Я бы предложил использовать Jenkins http://jenkins-ci.org/, это бесплатно, и это с открытым исходным кодом.

    Это довольно просто настроить, работает на нескольких платформах и хорошо интегрируется с другими инструментами непрерывной интеграции, такими как SonarQube (+ SQUALE) для измерения технического долга и Thucydides для автоматизации тестирования.

    Я бы предложил использовать GIT или GIT Hub для управления версиями вместо SVN. С моей точки зрения, это просто лучшая система контроля версий, которая поможет вам в дальнейшем наращивать усилия в области развития.

    Поскольку вы работаете в основном с проектом PHP, есть и другие инструменты, которые вы можете использовать.

    PHPUnit – для модульного тестирования

    PHP CodeSniffer – проверка стандартов кодирования

    PHP Depend – показывает зависимости PHP-кода

    XDEBUG – для тестирования производительности

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

    Удачи и наслаждайтесь!

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

    Я запускаю среду TEST в parrallel с моей средой PROD. У меня нет локального тестирования как такового. Если это слишком сложно получить в реальной среде TEST, я исправлю процесс сборки. Я не вижу смысла в тестировании локально, так как среда отличается. ОБНОВЛЕНИЕ: Единственное, что я делаю локально, – запустить «php -l», прежде чем я загружу что-нибудь. Остановка глупых ошибок.

    Процесс сборки работает с тем, что находится в текущем рабочем пространстве, которое включает незафиксированный код. Это не чашка чая каждого, но я собираюсь ТЕСТИРОВАТЬ очень часто. Перед тем, как отправиться в PROD, все будет совершено.

    Часть моего процесса сборки (аналогичная вашему) создает два файла META. Один содержит последние (обычно) 100 изменений, а также дает мне текущий список изменений. Показывает, какие изменения установлены. Другой содержит CLIENTSPEC (в Perforce), который показывает мне, какие ветви были использованы в этой сборке. Вместе они дают мне воспроизводимые сборки.

    Я не строю прямо в целевую среду, а на промежуточную область на сервере. Я использую SSH, поэтому это имеет смысл. Это дает мне несколько преимуществ. Самое главное, это позволяет избежать смерти на полпути через большую загрузку. Он также дает мне место для хранения файлов META, и все файлы сборки автоматически архивируются (поэтому я могу вернуться к любой сборке). Сценарий также регистрирует обновление (так что есть запись в лог-потоке, и я вижу пред- и пост-) и пинает всех демонов (я использую daemontools так «svc -t»). Все это лучше на целевой машине.

    Еще одна проблема заключается в изменении БД. Я сохраняю мастер-скрипт схемы БД, который я обновляю каждый раз, когда изменяется схема. Каждое из изменений также переходит в скрипт changes.sql, который загружается с помощью сборки в промежуточную область. Скрипт запускается как часть установочного скрипта.

    Я недавно начал такой же процесс, и я использую Beanstalk для хостинга svn.

    На платных счетах есть две отличные функции (начинайте с 15 вечера, я думаю):

    • развертывание позволяет пользователю создавать целевые объекты ftp для серверов постановки и производства, которые могут быть развернуты одним нажатием кнопки (с указанием ревизии и ветви)
    • webhooks позволяют пользователю настраивать URL-адрес, который вызывается при каждом фиксации / развертывании, передавая такие вещи, как номер версии, описание и пользователь. Это можно использовать для обновления документов, выполнения модульных тестов и обновления списков изменений.

    Я уверен, что есть другие хостинг-серверы с svn-серверами с этими двумя функциями, но beanstalk – это тот, который у меня есть, и он работает очень, очень хорошо

    Существует также API, который, как я полагаю, может быть использован для интеграции развертывания в ваш процесс.

    Рассмотрим fazend.com , бесплатную размещенную платформу CI, которая автоматизирует процедуры настройки и установки. Вам не нужно настраивать контроль версий, отслеживание ошибок, сервер CI, тестовую среду и т. Д. Все делается по требованию.