машины, например ссылку с полностью определенным путем
каталога, или даже устанавливает некий инструмент, который
существует только на его машине. Так он нечаянно предотвращает
возможность построения и запуска приложения на любой другой
машине."
Волшебные машины возникают и из-за "аппаратных" зависимостей
от машины, на которой осуществляется построение. Это может
случиться и на машине интеграционного построения, иногда на
ней добавляют переменную среды окружения или изменяют
конфигурацию, чтобы решить некую проблему, но забывают
написать сценарий, применяющий то же на другой машине. Если
бы ваша машина построения отказала и вы оказались не в
состоянии работать, каково это было бы? И сколько бы времени
заняла ликвидация проблемы и перезапуск машины?
Существует много решений данной проблемы. Вы можете
включить в сценарий построения большинство ваших зависимостей
и расположить их в хранилище. Можно создать макет некоторых
зависимостей, например базы данных или сервера приложений.
Кроме того, вы можете осуществить рефакторинг своих сценариев
построения, чтобы удалить большинство жестко заданных
зависимостей (например, переменные окружения) и заменить их
относительными ссылками.
ИСПОЛЬЗУЙТЕ СЕРВЕР CI
При реализации непрерывной интеграции имеет смысл использовать сервер CI. Безусловно, вы
можете создать свой собственный инструмент или выполнять интеграцию вручную; но сейчас
на рынке доступно множество превосходных инструментов, которые предоставляют
ценнейшие возможности, а также позволяют расширять их. Следовательно, необходимость в
создании собственного сервера CI отпадает. Но если вам все же придется делать это, то вы,
вероятно, захотели бы включить в него большинство следующих возможностей.
Периодический опрос хранилища с контролем версий на предмет изменений.
Выполнение неких действий по расписанию, например ежечасно или ежедневно.
Выявление "периодов затишья", в течение которых никаких интеграционных
построений не выполняется.
Поддержку различных инструментов, включая утилиты командной строки, такие как
Rake, make, Ant или NAnt.
Отправку электронной почты заинтересованным сторонам.
Отображение истории предыдущего построения.
Отображение панели управления, доступной через Web, чтобы каждый мог
просматривать информацию интеграционного построения.
Поддержку нескольких систем контроля версий для разных проектов.
И так далее. В большинстве серверов CI эти средства уже реализованы. Уверен, что можно без
проблем подобрать инструмент, который полностью удовлетворяет вашим потребностям и
подходит к среде разработки. CruiseControl, Luntbuild, Continuum, Pulse, и Gauntlet%- вот лишь
некоторые из инструментов, которые можно использовать для реализации CI. В приложении
Б,"Обсуждение инструментальных средств CI", рассматриваются и оцениваются различные
инструменты CI, присутствующие на рынке на момент написания этой книги.
Так что же использовать: сервер CI, интеграцию вручную или их комбинацию? Выбор за вами.
Мы безусловно одобряем применение сервера CI. Но иногда возникают резонные основания для
выполнения интеграции вручную, особенно с учетом минимальной инструментальной
поддержки для предотвращения передачи сбойного кода в хранилище.