2. Сервер CI должен работать автоматически, осуществляя построение без человеческого
вмешательства. Следовательно, сервером CI может и должен быть использован тот же
автоматизированный сценарий построения, что и разработчиками.
ЦЕНТРАЛИЗУЙТЕ ЭЛЕМЕНТЫ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Для эффективного построения программного обеспечения все его элементы следует
централизовать. Централизуя элементы программного обеспечения в системе контроля версий,
вы способствуете построению единой командой, описанному ранее в этой главе. Кроме того,
централизация помогает предотвратить проблему "но на моей машине это работает", когда
разработчик не способен воспроизвести дефект, который произошел в некой другой системе,
например на проверочной машине или машине пользователя. В этом разделе мы рассмотрим
различные методы централизации элементов программного обеспечения.
Один из подходов централизации элементов программного обеспечения подразумевает
использование для хранения всех файлов хранилища с контролем версий. В книге Стивена
Беркзука (Stephen Berczuk) и Бреда Апплетона (Brad Appleton)%Software Configuration Management
Patterns%это называется "Repository pattern" (схема хранилища) и подразумевает, что "рабочее
пространство состоит не только из кода", а включает следующее:
компоненты в виде исходных файлов или библиотек;
компоненты от сторонних производителей, такие как файлы JAR, библиотеки, файлы DLL
и другие файлы, в зависимости от языка и платформы;
файлы конфигурации;
файлы данных для инициализации приложения;
сценарии построения и параметры среды построения;
сценарии установки для некоторых компонентов.
При использовании хранилища с контролем версий для централизации%всех%элементов
программного обеспечения остается определить, что же именно составляет это "все". Можно
использовать уровни или рискнуть и решиться на минимум типов элементов программного
обеспечения, которые будут находиться в хранилище с контролем версий. Например, одним из
рисков для долго существующего продукта является то, что использование последующих
версий компиляторов и инструментов могут породить в этом продукте проблемы, иногда
незаметные и труднообнаружимые. Это риск обусловлен тем, что вам может понадобиться
перекомпилировать прежнюю версию.
Кроме того, некоторые версии инструментальных средств плохо совмещаются с другими.
Разработчику достаточно просто задействовать любую версию инструмента, которую он
считает подходящей, однако гоняясь за новыми преимуществами, можно обнаружить и новые
недостатки. Аналогично, возвращение и попытка воссоздания прежнего построения (например,
для воспроизведения проблемы клиента или устранения ошибки) может потребовать
определенного набора инструментальных средств, которые использовались при разработке
в%прежнее время. Таким образом, приходим к заключению, что, вероятно, практически нет
никаких элементов вашего проекта, которые не пригодились бы в будущем по разным
причинам. В этом и проявляется ценность для проекта централизованного хранилища
элементов с контролем версий.
СОЗДАЙТЕ СТРОГУЮ СТРУКТУРУ КАТАЛОГА
Использование хранилища с контролем версий для управления всеми элементами
программного обеспечения может остаться лишь разговорами, поскольку для его реального
воплощения сценарии должны уметь находить все необходимое на сервере CI. Чтобы
обеспечить реальную возможность находить и получать из хранилища все бесчисленные
комбинации элементов, которые могут быть использованы в проекте, вам придется создать
однозначную, логичную структуру каталога.
Один из подходов предлагает основывать структуру каталога на типичных действиях рабочего
проекта, например требованиях, проектировании, реализации и тестировании. Используете ли
вы такую структуру или другую, главное, чтобы она четко разделяла содержимое и однозначно
отражала его изменения. Кроме того, очень важно, чтобы каждая задача в построении
выполнялась из каталога, который содержит%только исходный код и сценарии, связанные с этой
задачей, а не весь проект. Например, ваш сценарий интеграционного построения может
получать весь исходный код и связанные сценарии из каталога%implementation. Это может