Visual Studio 2008 Профессиональный процесс сборки - PullRequest
3 голосов
/ 27 июня 2009

Я хотел бы выполнить две вещи в процессе сборки:

  1. Запуск юнит-тестов - у меня есть тестовый проект с моими юнит-тестами. Я хотел бы запустить все эти тесты при сборке и получить уведомление, если сборка не проходит проверку.
  2. Объединение файлов web.config - у меня есть 3 разных среды с деталями конфигурации, специфичными для каждого Я хотел бы создать файл конфигурации в зависимости от того, где развернуто веб-приложение.

Я просмотрел несколько ресурсов, и ничто не показалось мне лучшим решением для этого сценария. Большая часть моих поисков была связана с частью цели web.config, но если я собираюсь это сделать, я бы хотел выполнить модульное тестирование одновременно.

  • Скотт Хансельман имеет сообщение о том, как сделать несколько копий файла конфигурации, создать пользовательские конфигурации и скопировать через web.config пакетный файл, согласовав конфигурацию с источником. Мне не нравится это решение, так как мне нужно иметь несколько версий одного и того же файла, и есть вероятность, что одна обновится, а другая нет.

  • Использование nAnt выглядит многообещающе. Из того, что я понял, я бы использовал пакетный файл как часть процесса сборки. Замена переменных {template} в шаблоне файла переменными в файле xml кажется мне довольно простой, поэтому я полагаю, что склоняюсь к этому по сравнению с MSBuild. Меня беспокоит конфигурация среды, нескольким разработчикам необходимо, чтобы сборки nant находились в одном месте, поэтому они должны быть проверены в системе контроля версий. Это звучит нормально со мной.

  • Я столкнулся с CruiseControl, который на первый взгляд выглядит интересно, но, похоже, для этого потребуется приличное количество обучения.

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

Ответы [ 2 ]

12 голосов
/ 27 июня 2009

Для начала, это не амбициозная цель, это обычное явление с хорошо поддерживаемыми инструментами. Так что вы на правильном пути, и вам хорошо, что вы четко определили свои приоритеты.

Scripting

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

Вы захотите написать ряд сценариев уровня ОС, чтобы собрать все это вместе, но вам нужен солидный язык программирования для этого. Рекомендации включают в себя:

  1. Powershell
  2. Python
  3. Bash (то есть cygwin)

nAnt - прекрасный инструмент для управления вашими этапами сборки. Тот факт, что конфиг xml проверяется, разветвляется, объединяется, распространяется со всеми остальными, является огромным преимуществом.

Make и Scons также являются хорошими инструментами.

Несколько замечаний об этих скриптах. Они должны иметь чистый вывод и хорошие сообщения об ошибках. Я имею в виду отличные сообщения об ошибках. Вы не можете тратить слишком много времени на написание скриптов сборки, которые выдают хорошие сообщения об ошибках. Шутки в сторону. Кроме того, тщательно управляйте кодами ошибок своей ОС и убедитесь, что каждая команда сборки вызывает код ошибки в случае сбоя. Все серверы CI будут использовать это, чтобы пометить неудачную сборку. Если вы не смогли выполнить шаг 2, но не вызывали код ошибки до шага 10, отладку будет очень сложно.

Юнит-тесты

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

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

Как только вы доведите процесс сборки до точки, в которой вы можете сесть за командную оболочку и получить полную сборку, от Soup до Nuts (то есть от исходного кода до отправляемого), тогда пришло время взглянуть на то, что они называют инструмент непрерывной интеграции / сервер. Дженкинс хороший, как и Круиз-контроль и Buildbot. Я использовал их все, они в порядке, выберите один и пойдите с этим. Как только вы начинаете, их не так сложно выучить, и они управляют большим количеством уведомлений, о которых вы просили. Главное, что нужно иметь в виду, это то, что все они предназначены для выполнения и сообщения аргументов командной строки (более или менее)

Когда вы структурируете процесс сборки, помните, что он состоит из четырех основных шагов:

  1. Получение кода из репозитория
  2. Pre-сборка; обновление номеров версий и т. д.
  3. Компиляция / здание
  4. после сборки; упаковка; архивирование продуктов сборки, создание изображений .iso и т. п.
  5. Публикация: перемещение продуктов сборки в такое место, где их могут найти люди (в вашем случае веб-сервер)

Файлы конфигурации

Если у вас есть управление конфигурацией до одного файла, поклонитесь. Это принесет вам большие дивиденды. Вы говорите, что не хотите поддерживать три разных файла. Можете ли вы определить набор правил, которые преобразуют один базовый файл в три файла для публикации? Если это так, то вы можете написать скрипт, который преобразует вас на этапе упаковки. Помните, когда я сказал: «Не используйте летучие мыши? Это то, с чем ужасно сталкиваются файлы bat, и такие задачи всегда находят свое отражение в системах сборки.

Заключение

Наконец, помните, что смысл всего этого:

а. Убедитесь, что нет никаких ручных шагов между отправкой кода и доставкой продукта. Люди такие ужасные. Они делают ошибки, они не работают по выходным все время, все в таком духе.

б. Дайте разработчикам быстрый и полный конкретный отзыв о том, что то, что они представили, будет работать.

Удачи!

0 голосов
/ 18 августа 2009

Для вашего желания объединить файлы web.config, я рекомендую процесс, описанный в http://blog.jpboodhoo.com/NAntStarterSeries.aspx

По сути, у вас есть один XML-файл с именем local.properties.xml, в данном случае, который имеет все значения, которые меняются в зависимости от среды. Это один файл, который будет отличаться в каждой среде. Вы удаляете web.config из системы контроля версий. У вас есть файл web.config.template, который содержит общую структуру web.config, и добавьте его в систему управления версиями. Вы используете встроенную возможность Nant для копирования файлов и подстановки переменных через filterchain для динамической генерации файла web.config во время процесса сборки.

...