Настройка сервера Continuous-Integration для веб-приложений и библиотек C # - PullRequest
4 голосов
/ 15 мая 2011

Я тестировал CI Jenkins, и теперь пришло время построить сервер.Какой лучший путь?Существует множество вариантов, и я не знаю, какой из них выбрать.

  • общая машина, на которой работает другой сервер,
  • виртуальная машина внутри машиныиспользуется для других серверов
  • автономная машина
  • использовать несколько машин с разными ОС, на каждой для тестирования каждой платформы?(У меня есть несколько тестов веб-интерфейса, основанных на селене)

И еще, я хочу предложить ОС для использования.Я использую msbuild, и, вероятно, это доступно только в Windows ... но, возможно, лучшим вариантом будет сервер Linux с каким-то сборщиком из mono.

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

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

Спасибо!

Ответы [ 5 ]

3 голосов
/ 15 мая 2011

обо всем по порядку. Мой CI-сервер - это виртуальная машина под управлением CruiseControl.NET. Я не использую Jenkins, поэтому я не могу это прокомментировать. Судя по всему, Jenkins более развит, чем CC.NET.

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

Мой CI-сервер находится на сервере VMWare ESX, который имеет тонну ЦП и ОЗУ для разгрузки. На нем работает много других виртуальных машин. У меня около 35 сайтов, работающих через CI, и, вероятно, 20 размещены на самой машине, и еще 70 сайтов, которые собираются создавать, вручную вызывая их через панель мониторинга CI. У меня никогда не было с этим проблем с производительностью.

Ваш сервер сборки в идеале должен иметь ту же настройку, что и машины, на которых вы планируете развертывать свой код. Для веб-сайтов это будет та же ОС, что и на ваших производственных серверах (вероятно, Windows 2003 или 2008). Для настольных приложений я бы, наверное, просто выбрал последнюю и лучшую ОС, на которую вы ориентируетесь и которую можете себе позволить.

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

Как я уже говорил, я использую CruiseControl.NET. Пока это было здорово, и я доволен этим. Поскольку он написан на .NET, а вы используете .NET, для запуска вашего сервера требуется меньше движущихся частей (я вижу, что Jenkins построен на Java). Написание плагинов / расширений было бы теоретически проще, так как у вас уже есть .NET люди в доме. Я никогда не писал расширение для CC.NET, поэтому не могу сказать это с уверенностью, хотя знаю, что это возможно. Недостатком является то, что сообщество маленькое, а активное развитие идет медленно.

Наконец, я добавлю, что это будет МНОГО работы, чтобы начать. Мне потребовалось более 6 месяцев, чтобы подготовить мой CI-сервер к работе, еще несколько - перенести все наши проекты для его выполнения и еще много - на то, чтобы обучить остальных разработчиков тому, как его использовать или работать с ним.

Итак, в итоге,

  • Виртуализация это хорошо! (но это не имеет значения).
  • Вы должны сопоставить свою среду CI с тем окружением, в котором вы развертываете, если это возможно.
  • Тебе лучше быть готовым совершить долгую поездку.
  • Непрерывная интеграция великолепна, и вы не пожалеете о настройке CI-сервера. Что бы вы ни выбрали, это будет лучше, чем "ковбойское кодирование", которое продолжалось :)

РЕДАКТИРОВАТЬ Другие ответы публикуют свой процесс, поэтому я думаю, что я должен был сделать это тоже! :)

Мой магазин создает сайты LAMP и .NET, поэтому нам нужно что-то, что могло бы эффективно работать с обоими. У нас в качестве базовой платформы работает CC.NET, но почти все функции выполняются с помощью пользовательских Nant сценариев. Мы используем Nant, потому что он 1) основан на .NET и имеет встроенные команды .NET и 2) легко выполняет операции командной строки, которые составляют ядро ​​всех наших этапов сборки.

CC.NET прослушивает сервер SVN и получает обновления по мере их поступления. CC.NET проверяет их и запускает задачу NANT, которая выполняет всю реальную работу. Для .NET это означает mstest для модульного тестирования и msbuild для сборки и публикации. PHP обычно просто перемещает файлы прямо в среду назначения. Затем, если все шаги были выполнены успешно, Robocopy скопирует файлы на конечный сервер, который был сопоставлен как сетевой диск во время сценария запуска групповой политики (серверы Windows сопоставлены с net use и серверы LAMP сопоставляются с Webdrive ).

У нас есть серверы разработки, промежуточные / QA-серверы и производственные серверы. Поскольку мы работаем в .NET и LAMP, у нас есть один сервер на среду для каждого из этих этапов - всего 6, и все они виртуальные. Наши серверы разработки - единственные, которые настроены на непрерывную интеграционную сборку. Подготовка и производство выполняются принудительно только вместе с некоторыми другими SVN-мастерами, чтобы предотвратить случайное развертывание. Мы также собираем и тестируем AcrionScript, используя MXMLC , но это редко для нас.

3 голосов
/ 15 мая 2011

Вот наши настройки.У нас есть два виртуальных сервера (сервер сборки и тестовый сервер), а затем два производственных сервера.

Сервер сборки работает под управлением TeamCity (для CI) и FinalBuilder (для некоторых из более сложных заданий сборки, которые включаютредактирование файлов XML, изменение настроек конфигурации, установка и регистрация служб Windows).

Большинство наших приложений являются веб-приложениями ASP, ASP.NET или MVC.TeamCity автоматически проверяет код из Subversion (запускается при регистрации), компилирует все, что требует компиляции, развертывает последние страницы и библиотеки DLL на веб-сервере IIS, работающем в окне сборки.

Все наши сайты имеют несколькозаголовки хоста настроены в IIS, так что тот же сайт прослушивает www.mysite.com.build, www.mysite.com.test, www.mysite.com.Мы настроили псевдоним DNS в нашем контроллере домена, так что * .build указывает на сервер сборки, * .test указывает на тестовый сервер и т. Д.

Это означает, что как только кодTeamCity разработал и собрал, каждый в компании может увидеть его на www.whwhat.com.build.

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

На каждом этапе TeamCity запускает любые модульные тесты, которые являются частью проекта, а также запускает отдельный проект, который отправляет HTTP-запросы на различные ключевые URL-адреса на нашем сайте.и проверяет, все ли работает, работает и отвечает.

Наконец, есть задача «запустить в действие», которая приводит к развертыванию ВСЕГО сервера с тестового уровня на рабочий;это означает, что полная конфигурация сервера полностью контролируется TeamCity, который не рекомендует вносить изменения в конфигурацию на живых серверах, поскольку ваши изменения будут перезаписаны во время следующего развертывания.

TeamCity - это просто фантастика - теперь мы лицензировали ее, потому что нам нужно> 20 проектов (и аутентификация LDAP), но бесплатная версия годна для нас, и это совершенно потрясающая программа.FinalBuilder стоит дорого, но очень, очень прост в использовании - если у вас много денег и мало времени, сделайте это;если у вас больше времени, чем денег, используйте Nant или msbuild и напишите свои собственные шаги для редактирования файлов web.config и т. д.

РЕДАКТИРОВАТЬ: еще одна деталь, которую я пропустил - у нас есть тест и живая базасервер.Рабочие станции кодеров и серверы .build настроены для использования тестовой базы данных;* .test и живые серверы общаются с живыми данными.Мы используем SQL Compare для (вручную) отправки изменений схемы с тестового SQL-сервера на работающий SQL-сервер, но обычно TeamCity просто настраивает файлы конфигурации между сборкой и тестированием, чтобы переключать строку подключения к базе данных.

2 голосов
/ 15 мая 2011

Я бы посоветовал:

  1. Отдельный сервер сборки (независимо от того, является он верным или нет)
  2. Сервер сборки создает код при проверкев
  3. Наличие отдельного сервера развертывания для тестирования (опять же, виртуальный не имеет значения)
  4. Развертывание вашей сборки на тестовом сервере (вы можете иметь отдельную сборку для этого, то есть сборку CI иСборка и развертывание сборки для тестирования)
  5. Любые юнит-тесты или интеграционные тесты, которые я запускаю на сервере сборки, ручное тестирование выполняется на тестовом сервере

Надеюсь, это поможет.

1 голос
/ 03 августа 2011

Мои текущие настройки и лучшие практики:

Проекты и среда разработки:

  • Приложения C ++ и C #, включая некоторые веб-приложения C #.
  • Приложение Windows.
  • Subversion.
  • ~ 30 разработчиков по всему миру обращаются к централизованным серверам сборки.
  • Разработчики фиксируют ствол хранилища.

Сценарии сборки:

  1. Мы используем Visual Build Professional, VBP, www.kinook.com , в качестве инструмента корпоративной сборки.
  2. Сценарии сборки иерархически разбиты на слоиСценарии сборки, которые выполняют различные функции и могут быть использованы повторно.

Разработка сценариев сборки:

  1. Уровень сборки машины - проверка списков необходимых инструментов сборки, извлечение исходных кодов изМагистраль SVN.
  2. Уровень SVN - выполняет ветвление, управление версиями, фиксацию и переключение обратно на транк.
  3. Уровень продукта сборки - сценарий сборки, который собирает N номеров подкомпилированных scripts, где 1 сценарий sub build = 1 проект (не VS проектов).(Удобно для разработчиков)
  4. Слой сценариев подкомпоновки - Определяет коллекцию решений C # / C ++, которые будут построены.Также определяет зависимость порядка сборки.Использует MSBuild / t: перестроить для создания решений.Использует devenv для создания специальных проектов.(Удобно для разработчиков)

Ежедневные сборки:

  • Сборки от 1 до 4. в дизайне сценариев сборки.

Непрерывная интеграция (ci)builds:

  • Сборки 3. и 4. в дизайне сценариев сборки.

Базовая среда сборки: (наши более сложные проекты основаны на этих принципах)

  1. Отдельный сервер ежедневной сборки и сервер сборки непрерывной интеграции, а также отдельные тестовые серверы для тестирования после каждой успешной сборки непрерывной интеграции.(1 сервер ежедневной сборки, 1 сервер сборки ci, N тестовых серверов)
  2. ВМ с серверами Windows с несколькими ЦП в качестве машин сборки.(Для MSBuild / m)
  3. Другие операционные системы Windows в качестве тестовых машин.
  4. Круиз-контроль. NET, CCNet, установленный на всех машинах сборки / тестирования.
  5. Ежедневные сборки контролируютсяCCNet и запускается по расписанию ежедневно.
  6. Построение непрерывной интеграции, запускаемое CCNet при фиксации.

Поведение сборки:

  1. Ежедневная сборка начинается в полночь,публикует результаты сборки на общем сетевом диске, например: \ share \ daily_build.(Да, мы все еще используем общие диски.):)
  2. При успешной ежедневной сборке автоматически запускается сборка ci для очистки рабочей копии, проверки исходных кодов и сборки с нуля.(MSBuild / t: Build)
  3. CI build затем копирует встроенный двоичный вывод на сетевой диск, например: \ share \ ci_build.(Обратите внимание, 2 разные папки, 1 для ежедневной сборки, 1 для сборки ci)

Среда разработки:

  1. Разработчики запускают пакетный файл, который получает актуальную CIвывод сборки на свою машину разработки.
  2. Разработчики и менеджеры проектов полагаются на статус сборки ci, установлен CCNet Tray для получения немедленного результата сборок.
  3. Разработчики иногда проводят лотереи, чтобы узнать, кто нарушает сборкуи наказывать, заставляя его выпить пива по пятницам.: D

Надеюсь, это поможет.

0 голосов
/ 09 ноября 2011

Я бы предложил отдельный физический сервер сборки по одной простой причине ... Он получает поддержку со стороны руководства.

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

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