Ускорение PHP непрерывной интеграции сборочного сервера на Hudson CI
Я пытаюсь ускорить сборку и искал мысли о том, как это сделать. Я сейчас пользуюсь Hudson
в качестве сервера непрерывной интеграции для PHP
проект.
Я использую Ant
файл build.xml для сборки, используя файл, похожий на файл Себастьяна Бергмана php-hudson-template
, На данный момент, хотя (из-за некоторых странных проблем с падением Хадсона в противном случае), я только бегу phpDocumentor
, phpcpd
, а также phpUnit
, phpUnit
действительно генерирует Clover
отчеты о покрытии кода тоже.
Вот некоторые возможные узкие места:
phpDocumentor
: Занимает 180 секунд. В моем проекте есть несколько больших библиотек, таких какawsninja
,DirectedEdge
,oauthsimple
, а такжеphpMailer
, Я не уверен, что мне действительно нужно разрабатывать документацию для них. Я также не уверен, как игнорировать целые подкаталоги, используя мой файл build.xml.phpUnit
: Занимает 120 секунд. Это единственная часть сборки, которая не запускается какparallelTask
, Чем больше будет написано тестов, тем дольше будет увеличиваться это время. На самом деле не уверен, что с этим делать, кроме, возможно, запуска нескольких ведомых сборок Hudson и раздачи отдельных наборов тестов каждому ведомому. Но я также понятия не имею, как это сделать.phpcpd
: Занимает 97 секунд. Я уверен, что я могу устранить некоторые разбор и преобразование времени, игнорируя включенные библиотеки. Не уверен, как это сделать в моем файле build.xml.- Мой сервер: сейчас я использую один сервер Linode. Кажется, весь процесс облагается налогом.
Любые другие возможные узкие места, о которых вы можете подумать, я добавлю в список.
Какие есть решения для сокращения времени сборки?
3 ответа
Я вообще не эксперт по PHP, но вы должны быть в состоянии разделить свои тесты PHPUnit на несколько подчиненных Hudson, если это необходимо. Я бы просто разделил ваш набор тестов и запускал каждое подмножество как отдельную параллельную работу Хадсона. Если у вас есть машина с несколькими процессорами / ядрами, вы можете запустить на ней несколько ведомых устройств.
Одна очевидная вещь, которую вы не упомянули - как насчет просто обновить ваше оборудование или взглянуть на то, что еще работает на хосте Hudson и, возможно, потребляет ресурсы?
phpDocumenter:
phpdoc -h
раскрывает опцию -i, которая позволяет вам указывать список файлов / каталогов через запятую, которые следует игнорировать. Это можно добавить к тегу arguments вашего тега phpdoc build.xmlphpUnit: я заметил, что если я запускаю тесты с базой данных, это может быть медленным, но я не знаю, как это улучшить.
Одна возможная вещь, которая может помочь, - это не запускать Documenter каждый раз и запускать его только как часть сборки, которая происходит только один раз в день (или что-то подобное).
Я только недавно начал использовать эти инструменты, и это несколько вещей, которые я обнаружил.
Когда у нас была похожая проблема, мы прибегали к запуску документации в отдельной ночной сборке (вместе с нашими сценариями функционального тестирования в Selenium, поскольку это также довольно медленно). Таким образом, наша основная сборка CI не замедлялась за счет создания документации по API.
Тем не менее, я отмечаю, что PHP Documentor теперь обновлен до версии 2, в которой значительно улучшена скорость по сравнению с медленной старой версией 1. Похоже, он примерно в два-три раза быстрее, чем v1. Это будет иметь большое значение для вашего процесса CI. Смотрите http://phpdoc.org/ для получения дополнительной информации.
В качестве альтернативы вы можете взглянуть на apiGen и phpDox, которые являются альтернативами PHPDoc. Они оба определенно быстрее, чем PHPDoc v1; Я еще не сравнивал их с v2.