Автоматизация сборок из тегов Subversion
Я пытаюсь автоматизировать процесс сборки для инженерной группы. В рамках этой автоматизации я пытаюсь достичь точки, в которой применение определенного тега, который привязан к шаблону, приведет к запуску автоматизированного процесса, который будет выполнять следующее:
- Проверьте исходный код
- Создать скрипт сборки из шаблона
- Постройте проект
Я почти уверен, что мог бы сделать это с помощью пост-хука в Subversion, но я пытаюсь найти способ сделать это с помощью чего-то другого, кроме хука Subversion.
- Имеет ли смысл отслеживать каталог тегов в хранилище Subversion, чтобы запустить мой рабочий процесс?
- Есть ли достойные инструменты, которые помогут с этим (.NET будет здорово, если это возможно).
- Мне лучше просто написать движок для этого?
Мои предпочтения:
- Существующий продукт, который делает все или часть этого
- Если требуется разработка, лучше использовать.NET
- Работает с Windows (у нас есть репозиторий на основе Linux, но все сборки происходят на Windows)
8 ответов
Мне нравится Hudson - EASY, чтобы установить и работает из коробки с SVN.
Вы можете настроить его на каждый коммит.
Я скачал его и начал строить с ним в течение дня. Он прошел через множество изменений, но я бы порекомендовал его всем.
Я также использовал круиз-контроль, но не так доволен этим. У меня нет особых причин, кроме кросс-платформенной проблемы.
РЕДАКТИРОВАТЬ
Недавно я добавил работу на свой сервер сборки hudson, который прослушивает чат google/gmail jabber. С помощью этого механизма я могу "продвигать" "обычную" сборку до сборки выпуска. Я просто создал новую работу, которая выполняет шаги, необходимые для продвижения / публикации приватной сборки в кандидате на релиз.
Я сделал это с помощью Hudson. В обычном слоте проверки Subversion у меня есть проверка для ствола:
http://dryad.googlecode.com/svn/trunk/dryad
Затем, в качестве первого действия по сборке, у меня есть "исполняемая оболочка", и в этой оболочке используется переключатель svn, чтобы перейти к последнему тегу в хранилище:
svn switch http://dryad.googlecode.com/svn/tags/'svn ls http://dryad.googlecode.com/svn/tags | tail -n 1 'дриада
Следующим этапом сборки является команда maven 'clean install', которая запускает сборку с использованием кода из версии с тегами.
Я еще не понял, как заставить Хадсона начать с последней версии с тегами, вместо того, чтобы выполнять переключение, но переключатель работает. Тогда вы можете иметь триггер, когда каталог тегов обновляется.
Это автоматизировано... немного круто, но это работает...
Коммутатор должен включать в себя обратную черту для второй команды SVN, но должен был использовать ', потому что обратная связь здесь не показывается.
Похоже, вам нужен механизм непрерывной интеграции, например, CruiseControl или Hudson (Hudson написан на Java, но ОЧЕНЬ прост в использовании в Windows).
Теперь вы могли бы выдумать свои сценарии сборки для этих инструментов, чтобы они наблюдали за каталогом тегов, но это было бы немного не так, поскольку они предназначены для наблюдения за конкретным местоположением и построения проекта в этом месте. Если вы посмотрите весь каталог тегов, вы можете легко получить все теги, которые будут извлечены на сборочном компьютере, и вам понадобится скрипт верхнего уровня, чтобы решить, какой тег собирать.
Для того, что вы хотите, механизм сборки может наблюдать за определенным местоположением (скажем, "/branch /release"). Если вы затем объединитесь в эту ветку, Hudson автоматически соберет проект, заархивирует артефакты и создаст для вас тег, если он был успешным (см. Плагин тегов Subversion).
Мне не нравится делать подобные вещи из ловушки после фиксации, потому что это делает фазу фиксации слишком долгой. Тем не менее, TeamCity - это система управления исходным кодом, которая имеет функцию, которая делает это точно, не задерживая вас во время фиксации.
Я бы порекомендовал Хадсон для этого.
CruiseControl.Net может легко автоматизировать автоматическую сборку из репозиториев Subversion.
Он может контролировать хранилище (Svn и несколько других типов) и запускать автоматические сборки с использованием различных инструментов. (NAnt, MSBuild и т. Д.)
Я также рекомендовал бы Хадсон для этого. Я хотел сделать что-то подобное, создать тег и запустить его. Вместо этого я решил использовать этот плагин для Hudson:
http://wiki.hudson-ci.org/display/HUDSON/Release+Plugin
И используйте это, чтобы управлять созданием тега и явной сборкой выпуска.
С этой целью коммерческий продукт был объявлен на этом сайте!
http://www.finalbuilder.com/Default.aspx?tabid=314
Возможно, вам понадобится добавить пост-хук в SVN, чтобы запустить запуск сборки, если вы не хотите, чтобы он выполнялся по расписанию.
Как говорили другие парни, вам нужен сервер непрерывной интеграции (CruiseControl, CruiseControl.Net, Hudson и т. Д.). В то время как вы могли бы работать над сценарием сборки и фиксировать хуки для выполнения описанной вами функциональности, в конце вы обнаружите, что заново изобрели колесо (Continuous Integration Server). Нет необходимости, есть свободно доступные решения именно для этой цели.
Процесс будет работать немного иначе, чем вы описали выше. Сервер сборки будет:
- Определить новый коммит
- Оформите ваш исходный код
- Запустите ваш скрипт сборки
- Тег на успешную сборку
Фиксация запускает процесс и создает тег, а не тег, запускающий процесс. Сервер делает это, отслеживая хранилище svn, а не зацепляя коммит.
Ознакомьтесь с документацией CruiseControl.Net по этому вопросу, в частности с параметрами tagOnSuccess и tagBaseUrl. У Hudson и CruiseControl должны быть похожие варианты.
http://confluence.public.thoughtworks.org/display/CCNET/Subversion+Source+Control+Block
Я использую NAnt (и NAntContrib) для автоматизированных сборок. Он автоматически проверяет хранилище Subversion на наличие изменений и (если таковые имеются) получает последнюю версию исходного кода и запускает сборку.
Я не уверен, что существующие задачи позволяют делать именно то, что вы хотите, но, возможно, вы могли бы использовать его в качестве начала и, если необходимо, дополнить его задачами для ваших особых потребностей (он разработан с.NET).