Медленные сложные сборки и Hudson против Electric Cloud - PullRequest
4 голосов
/ 19 июня 2010

Является ли hudson подходящим инструментом для сложных сборок C ++?

У меня сборка C ++, которая занимает около 4 часов.Компиляция и упаковка занимают примерно половину времени, а тестирование занимает вторую половину.В настоящее время мы используем доморощенную систему, но есть некоторый ход, чтобы перейти к Hudson, поскольку мы используем ее для всех наших сборок Java.

Моя проблема в том, что непрерывная интеграция не очень ... непрерывна в 4часовые интервалы.Я хочу инструмент, который позволит мне распараллелить сборку понятным способом.

Хадсон отлично подходит для небольших сборок или сборок Java, где я сижу на вершине большого проекта maven, но я не думаю, что он будет хорошо масштабироваться для сложных сборок c ++.

Каким был ваш опыт?

Ответы [ 3 ]

7 голосов
/ 19 июня 2010

Похоже, у вас есть несколько вопросов здесь:

  1. Должен ли я использовать CI-сервер для управления сборкой C ++? Ответ однозначно ДА. Ваша доморощенная система может быть адекватной, но она не является стандартной, расширять ее, вероятно, сложно, и поддержание ее отвлекает от работы, за которую вам фактически платят.
  2. Является ли Хадсон правильным выбором для моего проекта? Вероятно, он выполнит свою работу и имеет преимущество в том, что уже находится на вашем сайте. Тем не менее, вы специально упоминаете, что вам нужен инструмент, который хорошо поддерживает распараллеливание, и я не думаю, что Хадсон действительно отвечает всем требованиям. Проблема в том, что Хадсон не был разработан с учетом параллелизма. Видите, представление процесса сборки в Hudson - это «задание», которое представляет собой просто последовательность шагов, выполняемых последовательно - извлечение, компиляция, тестирование, пакетирование и т. Д. Невозможно заставить эти шаги выполняться параллельно. Теперь вы можете обойти это, моделируя ваш процесс с несколькими заданиями. Каждая работа полностью независима, поэтому, конечно, они могут выполняться параллельно; вы можете использовать что-то вроде плагина Locks and Latches для координации заданий, но весь процесс сложнее, чем следовало бы, и немного неуклюже - вместо одного задания, представляющего один прогон В процессе сборки у вас есть несколько несвязанных заданий, в лучшем случае связанных между собой соглашением об именах.
  3. Может ли Electric Cloud помочь? Опять однозначное ДА. Electric Cloud предлагает ElectricCommander, CI-сервер с параллельной поддержкой, встроенной с самого начала. Как и в случае с Hudson, задание используется для представления процесса сборки, но шаги в задании можно легко выполнять параллельно (просто установите флажок «параллельно» на этих этапах), поэтому вам не нужно прибегать к добавлению. ons и kludges: один процесс сборки запуска - это одно задание с таким количеством параллельных шагов, сколько вам нужно.
  4. Вернёт ли правильный сервер CI "непрерывность" в мою интеграцию? Сервер CI покажет вам только это. Дело в том, что CI-сервер может обеспечить вам грубый параллелизм - поэтому, немного поработав, вы можете настроить его для запуска упаковки параллельно, например, с тестами. Приложив немного больше работы, вы, вероятно, сможете разделить фазу тестирования на несколько независимых частей, которые могут выполняться параллельно.
    Вы не дали много подробностей, но давайте предположим, что ваша сборка занимает 90 минут компиляции, 30 минут компоновки и 2 часа тестов, которые можно разбить на четыре 30-минутных фрагмента. Предположим далее, что вы можете выполнять упаковку и тестирование одновременно. Это сократит ваш 4-часовой процесс до 2 часов. На этом этапе «длинным полюсом» в вашем процессе является фаза компиляции, и хотя вы можете разбить его вручную на части, которые могут выполняться параллельно вашим CI-сервером, правда в том, что CI-сервер просто не подходящий инструмент для этой работы.
    Лучшим вариантом является использование инструмента сборки, который может дать вам автоматический мелкозернистый параллелизм на этапе компиляции. Например, если вы уже используете gmake, вы можете попробовать gmake -j 8, чтобы запустить 8 компиляций одновременно. Если ваши make-файлы чистые и все ваши зависимости верны, и у вас есть мощный сборочный сервер, это может дать вам довольно хороший прирост производительности. Вы также можете использовать ElectricAccelerator, другой продукт от Electric Cloud, который был специально разработан для ускорения этой части процесса сборки, даже для сборок, которые не могут безопасно использовать gmake -j из-за неправильных или неполных зависимостей.

Надеюсь, это поможет.

0 голосов
/ 19 июня 2010

Похоже, проблема в том, что у вас процесс сборки (make files ?, msbuild?), А не в Hudson.Хадсон просто собирается выполнить процесс сборки так же, как и пользователь из командной строки.Можно ли оптимизировать ваш процесс сборки?

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

0 голосов
/ 19 июня 2010

Разве вы не можете разбить сборку на несколько частей?

Вы упоминаете, что работа состоит из нескольких отдельных частей. Общее руководство с Hudson - выполнять сборку в одной работе, тестирование в другой, упаковку в другой и т. Д.

Вы можете скомпилировать код в задании A и заархивировать выходные данные, а затем указать заданию B скопировать эти артефакты из задания A и запустить тесты на них. Между тем, еще одно задание A может быть запущено из-за дальнейших коммитов в исходный репозиторий.

...