Насколько важны ежедневные сборки? [закрыто]

20

Одним из критериев теста Джоэл является ежедневная сборка. Идея состоит в том, что, если сборка сломана, тот, кто сломал ее, будет рядом, чтобы починить ее. Если сборка не может быть исправлена, каждый должен будет проверить старую версию и работать над этим. Я могу понять, как это может быть довольно плохо при централизованном управлении версиями, где важно избегать слияния и ветвления, насколько это возможно, но это звучит как незначительная неприятность для распределенного управления версиями. ты согласен с этим? Есть ли другие причины, почему ежедневные сборки важны?

Casebash
источник
2
Джоэл должен обновить это, чтобы быть "Ежедневными сборками и Автоматизированными тестами"
Пол
1
Или, что еще лучше, «непрерывная интеграция с автоматизированными тестами» - иногда мы не строим один день, иногда мы строим дюжину раз в день. Как только машины это делают, это не имеет значения.
Уайетт Барнетт
@WyattBarnett Я полностью согласен =) Я работал над проектом, который запускал сборку кода каждые 15 минут (если не происходила проверка активности), и это было потрясающе.
Патрик Хьюз

Ответы:

19

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

Цель состоит в том, чтобы выяснить, когда сборка прерывается до финальной фазы тестирования, чтобы найти их как можно скорее.

Просто установите его, чтобы построить свою основную ветку (и) разработки.

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

mbillard
источник
2
Сборка и тестирование ежедневно.
Пол
1
@ Пол: Только если вы не можете делать это чаще. Делать это на каждом коммите (ну, с некоторым гистерезисным временем) приятно.
Donal Fellows
4

Нужно добавить немного к этому (и @GoodEnoughs):

но это звучит как небольшая неприятность для распределенного контроля версий.

Абсолютно нет - то, что делает «серверная» сборка, это говорит вам, что ваш ствол будет собираться и более или менее проходить тесты более чистым (тем меньше конфигурация вашей среды).

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

В качестве простого примера - вы разрабатываете функцию «a», он разрабатывает функцию «b», или нет, в какой-то момент вам нужно сшить все это вместе - если при фиксации вы забудете добавить файл, который будет создавать приложение на вашей машине, но больше нигде. Поэтому, когда вы помещаете сборку в свой «ствол», запускается непрерывная интеграция, и сборка завершается неудачно, и вы будете знать и, надеюсь, прежде чем кто-нибудь получит ваш не совсем законченный код, вы сможете предпринять шаги.

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

Если вы добавили функцию - особенно ту, от которой зависят другие люди, - чтобы быть уверенными, что когда ее заставляют «жить», она создает и проходит тесты где-то, кроме вашей среды разработки, огромна. Более того, я выполняю развертывание из сборок с моего сервера сборки - это своего рода способ определения «окончательной» сборки. В конечном счете, я собираюсь запускать сборки, запускаемые пользователем. Его не хорошо говорить , что вы можете работать вокруг него - вы не можете , если вам это нужно (и я уже вскарабкался круглые коробки Дев в офисе , чтобы найти и взять недостающие файлы),

Это все немного сильно? Не знаю, но мой сервер сборки - одна из тех вещей, которые я не хочу возвращать.

Murph
источник
3

Я считаю, что ежедневные сборки очень важны. Если у вас распределенная команда в разных часовых поясах, то лучше всего найти время, которое примерно соответствует «концу дня» для большей части команды. Кроме того, если ежедневные сборки имеют автоматизированный тестовый компонент, то это более желательно.

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

Кхиви
источник
1

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

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

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

Дэн Дайер
источник
1

Ежедневные сборки в порядке. Вы определенно нуждаетесь в них, если у вас нет ничего, кроме как честно, я думаю, что тест Джоэла немного устарел в наши дни.

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

Если время сборки или развертывания слишком велико, рассмотрите возможность устранения некоторых из этих проблем с физическими или программными оперативными дисками, более быстрым подключением к Интернету, распараллеливанием сборок и т. Д. Время, которое вы сэкономите, быстро идентифицируя разрывы сборки, довольно быстро изменит стоимость оборудования. ,

Кит Брингс
источник
1

Ежедневные сборки не важны. Ежедневные сборки, которые всегда успешны , (или те, где он ломается только в течение часа). Наличие CI, когда сборка не работает 70% времени, не очень полезно, потому что если вещь в основном сломана, это не поможет вам определить ошибку.

скоро
источник
0

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

Идея «ежедневной сборки» состоит в том, чтобы всегда иметь что-то готовое, что могут запустить тестировщики и менеджеры проектов, чтобы у всех было представление о реальном состоянии проекта.

Раньше с настольными приложениями после «ежедневной сборки» тестер или менеджер проекта могли сразу же запускать приложение, поэтому не нужно было упоминать ни одного шага развертывания.

Сарел Бота
источник