Мы используем CruiseControl.net, однако ваше первое требование может быть проблемой. Не могли бы вы объяснить, как вы делаете выбор в отношении того, из какого хранилища вы извлекаете источник. CC.NET может работать с любым из них, или может работать с обоими одновременно, если вы немного умны с настройками ccnet.config, но это в большей степени зависит от того, как вы знаете, какой из них извлечь.
В остальном все просто, я использую NAnt для реальной работы, и это легко до этого.
редактирование:
NAnt не обновлялась в течение некоторого времени, разработка остановилась, когда был выпущен MSBuild. Если вы выполните поиск по stackoverflow, вы найдете довольно много вопросов типа «если я перейду к MSBuild», лично у нас есть достаточное количество знаний в NAnt, он делает то, что мы хотим, и есть некоторые вещи, которые мы делаем, которые появляются очень сложно в MSBuild, так что мы будем держаться еще дольше.
CruiseControl.NET имеет задачи, которые могут вызывать MSBuild напрямую, мы по-прежнему вызываем DevEnv напрямую, так как мы создаем много проектов развертывания, что является проблемой, которую MSBuild испытывает с трудностями.
Наш сценарий NAnt позволяет нам вытащить правильный источник из ClearCase до упакованного продукта, готового к отправке.
Однако NAnt - это всего лишь один из вариантов, если вы довольны другим языком сценариев, таким как PowerShell, то нет причин, по которым его нельзя использовать. CruiseControl.NET может вызывать любой исполняемый файл как задачу, используя теги, и передает много информации через переменные окружения. На этой странице: http://confluence.public.thoughtworks.org/display/CCNET/Executable+Task подробности о том, что передается.
С точки зрения использования одних и тех же шагов единственной разницей между этими двумя настройками будет блок управления исходным кодом в файле ccnet.config, наш скрипт NAnt вообще не изменяется, когда мы меняем используемое представление, так как все относительно и мы надеемся иметь стандартную компоновку для наших представлений, что означает, что мы знаем, где все постоянно.
Надеюсь, это поможет немного больше.
Алан.