Ускорение PHP непрерывной интеграции сборочного сервера на Hudson CI

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

Я использую Ant файл build.xml для сборки, используя файл, похожий на файл Себастьяна Бергмана php-hudson-template, На данный момент, хотя (из-за некоторых странных проблем с падением Хадсона в противном случае), я только бегу phpDocumentor, phpcpd, а также phpUnit, phpUnit действительно генерирует Clover отчеты о покрытии кода тоже.

Вот некоторые возможные узкие места:

  1. phpDocumentor: Занимает 180 секунд. В моем проекте есть несколько больших библиотек, таких как awsninja, DirectedEdge, oauthsimple, а также phpMailer, Я не уверен, что мне действительно нужно разрабатывать документацию для них. Я также не уверен, как игнорировать целые подкаталоги, используя мой файл build.xml.
  2. phpUnit: Занимает 120 секунд. Это единственная часть сборки, которая не запускается как parallelTask, Чем больше будет написано тестов, тем дольше будет увеличиваться это время. На самом деле не уверен, что с этим делать, кроме, возможно, запуска нескольких ведомых сборок Hudson и раздачи отдельных наборов тестов каждому ведомому. Но я также понятия не имею, как это сделать.
  3. phpcpd: Занимает 97 секунд. Я уверен, что я могу устранить некоторые разбор и преобразование времени, игнорируя включенные библиотеки. Не уверен, как это сделать в моем файле build.xml.
  4. Мой сервер: сейчас я использую один сервер Linode. Кажется, весь процесс облагается налогом.

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

Какие есть решения для сокращения времени сборки?

3 ответа

Решение

Я вообще не эксперт по PHP, но вы должны быть в состоянии разделить свои тесты PHPUnit на несколько подчиненных Hudson, если это необходимо. Я бы просто разделил ваш набор тестов и запускал каждое подмножество как отдельную параллельную работу Хадсона. Если у вас есть машина с несколькими процессорами / ядрами, вы можете запустить на ней несколько ведомых устройств.

Одна очевидная вещь, которую вы не упомянули - как насчет просто обновить ваше оборудование или взглянуть на то, что еще работает на хосте Hudson и, возможно, потребляет ресурсы?

  1. phpDocumenter: phpdoc -h раскрывает опцию -i, которая позволяет вам указывать список файлов / каталогов через запятую, которые следует игнорировать. Это можно добавить к тегу arguments вашего тега phpdoc build.xml

  2. phpUnit: я заметил, что если я запускаю тесты с базой данных, это может быть медленным, но я не знаю, как это улучшить.

Одна возможная вещь, которая может помочь, - это не запускать Documenter каждый раз и запускать его только как часть сборки, которая происходит только один раз в день (или что-то подобное).

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

Когда у нас была похожая проблема, мы прибегали к запуску документации в отдельной ночной сборке (вместе с нашими сценариями функционального тестирования в Selenium, поскольку это также довольно медленно). Таким образом, наша основная сборка CI не замедлялась за счет создания документации по API.

Тем не менее, я отмечаю, что PHP Documentor теперь обновлен до версии 2, в которой значительно улучшена скорость по сравнению с медленной старой версией 1. Похоже, он примерно в два-три раза быстрее, чем v1. Это будет иметь большое значение для вашего процесса CI. Смотрите http://phpdoc.org/ для получения дополнительной информации.

В качестве альтернативы вы можете взглянуть на apiGen и phpDox, которые являются альтернативами PHPDoc. Они оба определенно быстрее, чем PHPDoc v1; Я еще не сравнивал их с v2.

Другие вопросы по тегам