В ходе разработки структурно-сложных программных продуктов, в какой-то момент возникает необходимость автоматизировать процессы сборки и интеграции разрабатываемых проектов и дистрибутивов. Непрерывная интеграция - это практика разработки программного обеспечения, предполагающая частую (до нескольких раз в течение дня) автоматизированную сборку и последующее автоматическое тестирование текущей версии продукта. Такой подход позволяет снизить трудоёмкость самой интеграции, и выявлять в ней ошибки и противоречия, начиная с самых ранних этапов. Заметим, что данная методика предполагает использование системы управления версиями (как например CVSNT, Subversion) для хранения исходных кодов и всего остального, что необходимо для сборки и тестирования проекта.
Ранее разрабатывая статический анализатор кода PVS-Studio для поиска 64-битных и параллельных ошибок, мы решали данную задачу с помощью файлов сценариев командной строки Windows. Хотя такой подход кажется наиболее простым и не требует использования каких-либо специализированных инструментов, его применение неизбежно приводит к возникновению ряда проблем, а именно:
Для разрешения данных проблем было решено воспользоваться специализированной платформой для организации непрерывной интеграции - CruiseControl.NET. Перед системой сборки были поставлены следующие задачи:
CruiseControl.NET представляет собой пакет приложений, главным из которых является сервер автоматической интеграции. Наблюдая за системой управления версиями, сервер CruiseControl.NET способен обнаружить изменения в репозитории и автоматически запустить интеграционную сборку для верификации этих изменений. При этом локальная версия репозитория системы будет приведена в соответствие с последней ревизией системы контроля версий, то есть все изменившиеся со времени последней удачной сборки файлы будут обновлены. Помимо этого в CruiseControl.NET встроена мощная система триггеров (наборов условий, при выполнении которых сервер интеграции начинает сборку проекта), с помощью которых можно управлять началом сборки:
По завершении сборки сервер системы сообщит разработчикам о её результатах и опубликует их. Конечно, сборку любого проекта можно запустить и принудительно вручную. Как правило сервер интеграции размещают на специально выделенной машине, конфигурация которой максимально соответствует окружению в котором проект будет развернут. Результат только такой сборки можно считать конечным.
Ниже приведена схема организации сервера системы непрерывной интеграции:
Управлять сервером сборки возможно при помощи специального конфигурационного XML файла. По умолчанию он имеет имя ccnet.config и находится в одной с сервером директории. На самом верхнем уровне данного файла расположены очереди интеграции и проекты интеграции, а все остальные настройки описаны в подуровнях отдельных проектов. Проектов может быть много и они могут собираться или не собираться одновременно и в зависимости друг от друга, что и определяется их расположением в очередях интеграции. Несколько очередей могут собираться одновременно, а проекты внутри этих очередей могут собираться только последовательно.
Каждый проект представляет собой набор различных интеграционных заданий, триггеров для его запуска и блок, определяющий параметры взаимодействия сервера с системой контроля версий. Каждый из данных блоков описывается на соответствующих подуровнях проекта. Сами задания разделены на 3 блока: предшествующие сборке, составляющие непосредственно сборку и следующие за сборкой. Эти задания представляют из себя отдельные действия (такие, как выполнение команды из командной строки, запуск тестов или публикация результатов сборки), из которых и складывается процесс интеграции проекта. В CruiseControl.NET для сборки можно использовать много разных методов:
Сборка отдельного проекта будет считаться успешно выполненной только при условии успешного выполнения всех задач из 2-ого (сборочного) блока. CruiseControl.NET имеет большой набор методов публикации результатов:
В дополнение к серверу автоматизации пакет CruiseControl.NET включает в себя инструменты CCTray и Web Dashboard. CCTray - это утилита Windows, которая висит в области нотификаций и показывает статус сборок на удаленном сервере. С ее помощью также можно наблюдать статус нескольких сборок на разных серверах одновременно и заставлять сервер производить сборки. Web Dashboard - веб приложение для сервера IIS. Оно призвано отображать данные по сборкам через веб интерфейс. При помощи него можно отображать данные с разных серверов.
Польза от внедрения подобной системы очевидна. В первую очередь это безболезненная интеграция всего проекта. Интеграция различных модулей и правок разных программистов происходит в автоматическом режиме, и при возникновении каких-либо ошибок об этом становится сразу известно. Более того, непрерывная интеграция полезна не только для определения состояния дел в текущий момент, но и для анализа тенденций. Однако стоит заметить, что и сам процесс автоматизированной интеграции также требует постоянной наладки и подстройки в соответствии с изменениями в собираемых им проектах.
0