Процесс сборки - что использовать?
Я рассматриваю возможность написания собственного кода доставки с помощью PowerShell и/или С#, возможно, для обхода оболочки NAnt или MSBuild.
- Почему я должен не идти таким образом? Неужели это так сложно
по сравнению с использованием NAnt или MSBuild?
- Любая хорошая, современная книга, которая может помочь?
- Любые лучшие идеи?
Предыстория (P.S. Это для некоторых религиозная проблема).
Один магазин для людей, несколько исследовательских проектов. Как и большинство из нас - теперь окна и ASP.Net. Принимая во внимание мобильный и облачный.
Я начал вмешиваться в NAnt и пытался следовать Эксперт .Net Delivery с использованием NAnt и CruiseControl.Net. Весь вопрос о "доставке" был поставлен на лед, и теперь настало время "разморозить" его. Однако я не уверен, куда идти. Из того, что я узнал:
NAnt показывает свой возраст. Это неуклюже: гораздо труднее понять и поддерживать, чем современный язык OO, такой как С#. Даже после того, как я следил за книгой, кажется странным работать в тайной среде, где вы хотите выполнить XML, а цикл и наследование (насколько я помню до "ледникового периода" ) трудно себе представить.
MSBuid является специфичным для MS. Я даже не уверен, поддержит ли он среду, отличную от MS. Командный фундаментный сервер дорог.
Несмотря на это, они как-то обе кажутся ценными, потому что в моем поиске SO я не слышал, чтобы кто-то использовал свое собственное программное обеспечение. Однако я не понимаю, почему не использовать С# и просто вызывать задачи NAnt и/или MSBuild по мере необходимости.
SO - NAnt Vs. MSBuild
Мой совет - это все наоборот: избегайте MSBuild, как чума. NANT намного проще настроить свою сборку для автоматического тестирования, развертывания в нескольких производственных средах, интегрировать с cruisecontrol для среды ввода, интегрироваться с источником управления. Мы столкнулись с такой болью с помощью TFS/MSBuild (используя TFSDeployer, пользовательские сценарии powershell и т.д.), Чтобы заставить его делать то, что мы могли сделать с NANT из коробки. Не тратьте впустую свое время.
SO - NAnt против скриптов:
гораздо больше для создания продукта, чем для его компиляции. Из-за того, что предоставляют эти инструменты (и их расширения), задачи, такие как создание установок, обновление номеров версий, создание эскродов, распространение финальных пакетов и т.д., Могут быть намного проще. Хотя вы можете делать все это с помощью обычных скриптов, использование NAnt или MSBuild дает вам прочную основу для выполнения всех этих
Ответы
Ответ 1
NAnt, поскольку проект мертв, или на жизнеобеспечении (последний выпуск был 0,86 бета 1, два года назад). Это было в основном прервано выпуском MSBuild. NAnt был хорош, MSBuild в порядке, я думаю, но я чувствую, что все больше и больше обращается к написанию кода, ну, вместо языка, основанного на XML-процедуре. С основами построения на основе XML опыт отладки ужасен, и вы в конечном итоге обманываете, встраивая "скрипты" в С#, который побеждает цель объявления над программированием. Та же печальная история, что и XSLT.
Некоторые хорошие фреймворки сборки без XML:
Я все еще использую MSBuild, так как это формат файлов csproj, но для конкретных вещей я избегаю построения логики в XML (без пользовательских задач MSBuild).
Ответ 2
Не используйте С# для построения script, потому что вы не хотите компилировать его, когда вы вносите в него изменения.
Если вы планируете использовать PowerShell, посмотрите PSake.
Если вы дружите с XML, переходите к MSBuild или NAnt. Возможно, те, что строят скрипты, ценны для вас. MSBuild имеет одно преимущество: Ctrl + F5 создает этот script в Visual Studio.
Я медленно продвигаюсь к Rake, потому что это лучше, а Ruby - язык программирования (это означает, что вы можете что-либо сделать): Я писал о том, как хорошо это могло но вы должны перевести его или посмотреть только на код. Если вам это нравится, вы можете захотеть увидеть полный script и зависимости.
Хорошая книга о непрерывной интеграции - от Paul Duvall, Steve Matyas и Andrew Glover (Непрерывная интеграция: повышение качества программного обеспечения и снижение риска).
Ответ 3
В конце дня обе задачи MSBuild и NAnt могут выходить в командной строке, поэтому в конечном итоге они могут поддерживать не-MS файлы.
Я бы отдал предпочтение MSBuild лично и позволял серверу сборки, например TeamCity CCNET, создавать и развертывать и т.д. Это невероятно гибкое.
Ответ 4
Я не вижу причины, почему бы не сделать простой процесс сборки в Powershell.
Я использую следующее для проекта sandbox:
#Types
Add-Type -Path D:\Code\OSLib\SharpSvn-x64\SharpSvn.dll
#Tools
$svn = New-Object SharpSvn.SvnClient
$msbuild = 'D:\Windows\Microsoft.NET\Framework64\v4.0.21006\msbuild'
$mstest = 'D:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\mstest'
#Sandbox
$sandbox = New-Object SharpSvn.SvnUriTarget -argumentlist "http://dan:[email protected]:81/svn/sandbox/trunk/"
$workingdir = 'D:\Code\sandbox'
$builddir = 'D:\Build\sandbox'
$solution = $builddir + '\sandbox.sln'
$tests = '/testcontainer:D:\Build\sandbox\sandbox.Tests\bin\Debug\sandbox.Tests.dll'
function sandbox() { ii D:\Code\sandbox\sandbox.sln }
function build()
{
echo 'Empty build directory and recreate'
rm -r -Force $builddir | out-null;
md $builddir | out-null;
echo 'Checkout successful? '
$svn.Checkout($sandbox, $builddir);;
echo 'Building'
.$msbuild $solution /nologo;
echo 'Testing'
.$mstest $tests /nologo;;
}
Айенде Рахиен тоже сделал аналогичную вещь, здесь.
Надеюсь, что это поможет,
Доброта,
Dan
Ответ 5
Самая большая проблема - обслуживание ваших скриптов сборки. Если вы видите, что ваши проекты или среды остаются несколько статичными, тогда нет причин не писать собственные сценарии сборки, упаковки и развертывания.
Вещи, как правило, намного сложнее, чем ваши проекты. Некоторые из преимуществ MSBuild, nAnt и других (коммерческих) продуктов - это предварительная поддержка для интеграции с общими службами или концепциями (скажем, для архивирования файлов), и это занимает значительно меньше времени, чтобы закрепить его в процессе сборки.
Там будет стоить (реальное или с точки зрения усилий), так как вы можете разумно прогнозировать свои потребности в автоматизации, идите в направлении, которое имеет смысл для вашей среды.
Я добавил некоторые соображения относительно того, какой подход, который вы найдете, подходит лучше здесь, они могут помочь в определении области автоматизации.
Ответ 6
Если вы намереваетесь оставаться "магазином одного человека", и ваши проекты, как правило, небольшие, то вы, вероятно, сможете обойти свою собственную систему сборки. Я бы по-прежнему рекомендовал не делать этого, поскольку опыт работы с обычно используемыми средами сборки - это хорошая вещь, которую нужно иметь в своем резюме.
Я написал пользовательскую систему сборки, которую мы используем на работе около пяти лет назад, чтобы обрабатывать некоторые довольно сложные многоцелевые сборки, которые у нас есть. Мы используем его с 2003 года и продолжаем использовать его. Тем не менее, я пытаюсь переместить его на Ant или даже Make по следующим причинам:
- Система сборки, которую я написал, запускается в Windows, и у нас есть потребность в других платформах. Его можно переписать для работы в другом месте довольно легко, но код управления процессом трудно легко переносить.
- Интеграция в среду CI - это боль, если вы используете полностью настраиваемую среду.
- Добавление поддержки для различных технологий SCM - это медведь. Нам нужна поддержка Visual SourceSafe, Subversion и Perforce.
- Расширение и поддержание работы - это большая работа, которая "не добавляет значения для клиента".
Теперь наша среда немного сложнее, чем у большинства разработчиков, так как мы разрабатываем встроенные системы, поэтому нет ничего необычного в том, что сборка одного продукта может быть построена с помощью двух или трех различных цепочек инструментов в Windows, выкладывается на Linux-машину через ssh для цели только для Linux и psexec на удаленную машину Windows для использования компилятора node. Мне очень смешно оглядываться назад и думать, что система сборки, которую мы начали с одного пакетного файла, была переписана с использованием Perl для размещения смеси декларативных операторов и операторов языка программирования, а затем была написана снова в Ant -like XML-декларативный стиль, который выдает пакет или оболочку. Теперь я думаю о замене всего этого на Ant + Maven + Ivy или какую-то подобную цепочку.
Роллинг моей собственной системы сборки был правильным решением для меня в то время, поскольку мы были довольно маленьким магазином, делающим сборки, которые были в основном основаны на инструментах командной строки, и в то время не было широкого набора инструментов. Однако сегодня я бы рекомендовал внимательно и внимательно изучить доступные инструменты. В конце концов, создание собственной системы сборки означает, что вы будете тратить время и деньги на запись и поддерживать ее вместо написания производственного кода.
Сегодня доступно много инструментов для решения этой задачи, которая обрабатывает практически любую искаженную идею, которую вы можете придумать. Я думаю, что время, потраченное на изучение существующей системы и расширение ее для удовлетворения ваших потребностей, вероятно, более целесообразно. Я нашел опыт написания задач Ant довольно интересным. В целом, это был хороший опыт обучения, хотя я сделал это на контрактной работе, которая использовала Ant и CruiseControl для публикации документов.
Ответ 7
Одна вещь, о которой я до сих пор не упоминал много: управление зависимостью/перестройкой. Хорошая система сборки (даже почтенная make
) будет обрабатывать это для вас, и если вы создадите собственную систему сборки, вы сделаете одну из двух вещей:
- Часто восстанавливать все (или, по крайней мере, больше, чем вам нужно)
- Внедрение логики отслеживания зависимостей и обновления самостоятельно
С этой точки зрения, я думаю, долго и упорно перед прокаткой собственного решения.
Печально слышать, что NAnt умирает; в то время как у него есть доля бородавок, Ant - разумная и гибкая система сборки.