Как вы производите сборку на сервере интеграции?

Предположим, у вас есть два разработчика, работающих над проектом локально на своих ноутбуках (A и B). У каждого из них есть рабочие копии репозитория SVN, и они кодируются в VS. У каждого есть полнофункциональная копия приложения. Они возвращаются к SVN на каждой остановке.

У вас есть сервер интеграции / тестирования (C), у которого есть другая рабочая копия, которая обновляется всякий раз, когда вы хотите протестировать.

У вас также есть производственный сервер (D), на котором есть xcopy после сборки из C.

Скажем, код является проектом веб-приложения, поэтому он требует явной сборки (в отличие от проекта веб-сайта, который просто берет исходный код и строит на лету).

Как вы управляете этим на сервере интеграции (C)?

Если разработчики создают на своих машинах (A и B), затем отправляют библиотеки DLL на сервер интеграции (C) ... это не сработает, потому что сервер интеграции должен взять код от них обоих и разработать общую DLL. . Итак, весь исходный код должен попасть на сервер интеграции (C), быть собран там, и только необходимые файлы и DLL должны быть переданы в производство (D).

Как вы управляете сборкой на сервере интеграции (C)? У вас есть синхронизированная сборка из командной строки? Вы устанавливаете VS на сервере интеграции (C) и строите таким образом? Если это делается из командной строки, как управлять необходимыми ссылками и другими настройками, которыми VS обычно управляет в файле CSPRJ или SLN?


person Deane    schedule 03.05.2009    source источник
comment
Спасибо всем, кто комментировал. В итоге мы настроили CruiseControl и используем задачу CSC в Nant для сборки непосредственно из командной строки на сервере интеграции. Он работает очень хорошо и дает нам преимущество более контролируемой и стандартной сборки, чем то, что вы получаете от группы разработчиков, создающих свои локальные копии VS.   -  person Deane    schedule 20.05.2009


Ответы (3)


Лучшее решение этого вопроса - использовать решение для непрерывной сборки, такое как CruiseControl. Вы правильно определили все подводные камни самостоятельного выполнения, и, в конце концов, будет намного проще настроить сторонний пакет, и вам не придется решать эти проблемы самостоятельно.

CruiseControl можно настроить для создания на основе фиксации подрывной деятельности, на временной основе или по запросу. Кроме того, он также может запускать все ваши модульные тесты и предупреждать людей, когда что-то идет не так. В целом это отличный пакет.

person Ryan Brunner    schedule 03.05.2009

Мы также используем ловушку фиксации Subversion из репозитория svn, которая активирует сборку модульного теста при каждой фиксации. Мы объединяем различные сборки в цепочку, поэтому интеграционный тест и веб-тесты запускаются, когда модульные тесты построены зеленым. Кроме того, мы действительно хотели бы связать сборку выпуска в конце всего этого, но наши интеграционные тесты недостаточно стабильны для этого (нестабильная серверная среда с плохими SLA в разработке - я ненавижу это!). На данный момент мы вручную запускаем релизные сборки. С точки зрения качества мы могли бы сразу перейти от всех зеленых огней к серверам приемочного тестирования, но это означает, что вы, вероятно, захотите, чтобы в приемочном тесте выполнялись чередующиеся изображения, поскольку система сборки может создавать довольно много времени простоя, если она повторно развертывается каждый раз, когда успешная фиксация прошла полностью. (В нашем проекте мы большую часть времени не работали с 10:00 до 14:00, так как примерно в это время идет непрерывный поток коммитов;)

person krosenvold    schedule 03.05.2009
comment
Но как на самом деле выполнить сборку? Командная строка? CC.Net? - person Deane; 03.05.2009
comment
Попробовав все варианты с открытым исходным кодом, мы закончили с atlassians bamboo. Самые умные деньги, которые мы когда-либо тратили; вы можете потратить много времени, пытаясь заставить сборку работать правильно. - person krosenvold; 03.05.2009

Мы используем круиз-контроль для непрерывной интеграции на сервере интеграции. Наш скрипт круиз-контроля выполняет следующие шаги:

  • Загружает последний код из SVN на сервер cc.net
  • Выполняет файл MSBUILD для компиляции последнего загруженного кода
  • скопируйте релизную сборку в отдельную папку
  • Мы поддерживаем отдельную папку для сборок «Release», поэтому тот же сценарий также фиксирует последнюю сборку в ветке SVN «Release».
  • Выполните тестовые примеры [построенные с использованием nUnit]
  • Отправьте электронное письмо со статусом сборки и результатами выполнения теста.

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

Когда на сервере интеграции все в порядке, мы просто «обновляем» ветку «релиз» на производственном сервере.

дополнительную информацию о cc.net можно найти здесь

Если вам нужна помощь со сценариями, я обязательно могу вам помочь.

person Vikram    schedule 03.05.2009