Как лучше всего настроить сервер интеграционного тестирования?

StackOverflow https://stackoverflow.com/questions/29971

Вопрос

Настраивая сервер интеграции, я сомневаюсь в наилучшем подходе к использованию нескольких задач для завершения сборки.Как лучше всего объединить все в одну большую работу или сделать мелкие зависимые?

Это было полезно?

Решение

Вы определенно хотите разбить задачи.Вот хороший пример конфигурации CruiseControl.NET, в которой для каждого шага предусмотрены разные цели (задачи).Он также использует файл common.build, который можно использовать в разных проектах с небольшой настройкой.

http://code.google.com/p/dot-net-reference-app/source/browse/#svn/trunk

Другие советы

Я использую TeamCity со сценарием сборки Nant.TeamCity упрощает настройку серверной части CI, а сценарий сборки nant упрощает выполнение ряда задач по созданию отчетов.

Вот статья, которую я написал об использовании CI с CruiseControl.NET. В комментариях к ней есть сценарий сборки nant, который можно повторно использовать в разных проектах:

Непрерывная интеграция с CruiseControl

Я предпочитаю следующую настройку (на самом деле, если вы работаете в проекте .NET):

  • КруизКонтроль.NET.
  • Задачи НАНТ для каждого отдельного шага.Nant.Contrib для альтернативных шаблонов CC.
  • NUnit для запуска модульных тестов.
  • NCover для покрытия кода.
  • FXCop для отчетов статического анализа.
  • Subversion для контроля версий.
  • CCTray или аналогичный вариант на всех устройствах разработки для получения уведомлений о сборках, сбоях и т. д.

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

В таких случаях я создаю три сборки (или, может быть, две):

  • Сборка CI запускается при регистрации и выполняет чистую сборку SVN, сборку и запускает облегченные тесты.В идеале вы можете сократить это время до нескольких минут или меньше.
  • Более комплексная сборка, которая может выполняться ежечасно (в случае изменений), которая делает то же самое, что и CI, но выполняет более полные и трудоемкие тесты.
  • Ночная сборка, которая делает все, а также выполняет покрытие кода и статический анализ сборок, а также любые этапы развертывания для создания ежедневных пакетов MSI и т. д.

Ключевым моментом в любой системе CI является то, что она должна быть органичной и постоянно дорабатываться.Для CruiseControl.NET есть несколько отличных расширений, которые записывают и отображают время сборки и т. д. для шагов, а также позволяют выполнять исторический анализ и, таким образом, позволяют вам постоянно настраивать сборки, чтобы они оставались быстрыми.Менеджерам трудно принять тот факт, что сборочная коробка, вероятно, будет занимать вас пятую часть вашего рабочего времени только для того, чтобы не дать ей остановиться.

Мы используем билдбот, при этом сборка разбита на отдельные этапы.Необходимо найти баланс между разбивкой этапов сборки с достаточной степенью детализации и созданием целостного блока.

Например, на моей нынешней должности мы создаем подкомпоненты для каждой из наших платформ (Mac, Linux, Windows) на соответствующих платформах.Затем у нас есть один шаг (с несколькими подшагами), который компилирует их в окончательную версию, которая в конечном итоге попадет в окончательные дистрибутивы.

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

Мой совет — записать шаги на доске как можно более расплывчато, а затем основывать на этом свои шаги.В моем случае это будет:

  1. Создание частей плагина
    1. Скомпилировать для Mac
    2. Скомпилировать для ПК
    3. Компилировать для Linux
  2. Сделать окончательные плагины
  3. Запустите тесты плагина
  4. Создайте промежуточную IDE (нам нужно запустить сборку)
  5. Сборка окончательной версии IDE
  6. Запустите тесты IDE

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

В любом случае вы сможете создать одну большую работу из более мелких частей.

Добрый день,

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

</thebloodyobvious> (-:

Ура, Роб

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

Это делает ваш процесс сборки более понятным для других людей (вы документируете его по ходу работы, чтобы любой из вашей команды мог его забрать, не так ли?), а также увеличивает вероятность повторного использования.Скорее всего, вы не будете повторно использовать сценарии высокого уровня (хотя это возможно, если у вас есть похожие проекты), но вы определенно можете довольно легко повторно использовать (даже если это копирование/вставка) отдельные операции.

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

В среде моей команды мы используем NAnt, поскольку он обеспечивает общую среду сценариев между машинами разработки (где мы пишем/отлаживаем сценарии) и CI-сервером (поскольку мы просто выполняем одни и те же сценарии в чистой среде).Мы используем Jenkins для управления нашими сборками, но по своей сути каждый проект просто вызывает одни и те же сценарии NAnt, а затем мы манипулируем результатами (т. е. архивируем выходные данные сборки, отмечаем неудачные тесты и т. д.).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top