Настройка цикла развертывания / сборки / CI для проектов PHP - PullRequest
198 голосов
/ 02 февраля 2010

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

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

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

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

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

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

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

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

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

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

Я ищу

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

  • Особенно, хорошие пошаговые руководства и пошаговые руководства о том, как это настроить

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

, а также

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

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

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

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

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

Ответы [ 9 ]

76 голосов
/ 09 февраля 2010

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

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

Предупреждение: я когда-либо использовал linux только в качестве базы для вышеупомянутых серверов сборки (CC.net работал на mono ), но все они - в соответствии с документацией - запускались кроссплатформенными. *

Настройка сервера 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 или jetty . Инструкции по установке доступны для всех основных серверов приложений

Обновление : Kohsuke Kawaguchi создал установщик службы Windows для hudson

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

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

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

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

Ловушки:

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

Удачи!

22 голосов
/ 02 февраля 2010

Вы ищете термин «непрерывная интеграция».

Вот пример того, кто использует 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 / etc. решение, потому что они покроют ваши резервные копии и сохранят работоспособность их серверов, поэтому вы можете сосредоточиться на разработке.

Учебное пособие по настройке Hudson см .: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/

6 голосов
/ 05 февраля 2010

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

Он поддерживает SVN, а теперь поддерживает Git и имеет отличный пользовательский интерфейс. Он доступен для Linux, Windows и Mac и может работать автономно на своем собственном сервере Tomcat, что отлично подходит для людей (таких как я), которые не любят тратить дни на настройку своих инструментов). Несмотря на то, что это может показаться дорогим, я, будучи одиноким разработчиком, приобрел лицензию на стартовый комплект за 10 долларов (10 долларов за программное обеспечение). Это отлично подходит для небольших команд и стоит посмотреть.

5 голосов
/ 14 мая 2014

PHPTesting PHPCI Это замечательный сервер непрерывной интеграции, встроенный в php.

Плюс, это бесплатный и открытый исходный код. :)

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

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

  • Atoum
  • Behat
  • Костер
  • Codeception
  • Композитор
  • E-mail
  • 1024 * Grunt *
  • IRC
  • PHP
  • Lint
  • MySQL
  • PDepend
  • PostgreSQL
  • PHP Code Sniffer
  • Детектор копирования / вставки PHP
  • PHP Spec
  • PHP Unit
  • Команды оболочки
  • Tar / Zip
3 голосов
/ 07 июня 2014

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

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

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

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

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

PHP CodeSniffer - Проверка на стандарты кодирования

PHP Зависит - Показывает ваши зависимости кода PHP

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

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

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

3 голосов
/ 25 января 2014

Я в основном системный администратор, но иногда я пишу и 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.Начиная с версии 1.4, он поддерживает роли, которые вы можете загрузить с их сайта сообщества galaxy.ansibleworks.com, и это сделает за вас тяжелую работу.Это называется jenkins-php .

3 голосов
/ 09 февраля 2010

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

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

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

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

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

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

2 голосов
/ 24 октября 2010

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

2 голосов
/ 02 февраля 2010

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

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

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

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

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

...