Ускорение PHP непрерывной интеграции сборочного сервера на Hudson CI - PullRequest
5 голосов
/ 13 сентября 2010

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

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 13 сентября 2010

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

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

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

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

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

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

0 голосов
/ 27 апреля 2012

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

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

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

...