Как лучше настроить сервер тестирования интеграции? - PullRequest
5 голосов
/ 27 августа 2008

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

Ответы [ 7 ]

3 голосов
/ 27 августа 2008

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

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

1 голос
/ 27 августа 2008

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

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

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

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

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

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

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

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

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

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

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

1 голос
/ 27 августа 2008

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

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

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

0 голосов
/ 11 июля 2012

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

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

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

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

0 голосов
/ 27 августа 2008

G'day,

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

</thebloodyobvious> (-:

ура, Rob

0 голосов
/ 27 августа 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...