понедельник, 19 июля 2010 г.

Team Foundation Server 2010 & Web-project deploy

<понудим>
TFS 2010 в последнее время меня весьма занимает, причём не всегда в хорошем смысле - две недели возился, пытаясь настроить такую простую вещь как деплой приложения на веб-сайт.
Основная проблема, почему нельзя это сделать легко и просто стандартна для Microsoft - есть несколько вариантов (по крайней мере я знаю вариентов 5-7) как это сделать, но мало где они описаны подробно.
Я вообще не говорю про то, что найти вменяемую документацию по MSBuild нереально, её просто нет.
Ну так вот, какие у нас есть варианты:

  • Самый быстро бросающийся в глаза - параметрами MSBuild
  • Каким-нить target'ом (типа AfterBuild) после сборки в том же MSBuild
  • Создав и настроив файл *.targets в проекте - это опять для MSBuild
  • Каким-нить bat файлов или событием тупо скопировать директорию
  • И т.п. лабуда чаще всего связанная с MSBuild.

Ну как всегда: параметры не хотят работать, будто MSBuild их не видит; события обрабатывать не очень удобно и просто и т.п.
Как всегда всё оказалось совсем не там, где искали. Про настройку (для деплоя) MSBuild можно забыть. Вернее не совсем забыть, но с другого конца подойти. Оказывается эти хитрые Микрософты, которые и так уже задрали с рабочими процессами в SharePoint и здесь их умудрились пропихнуть!
< /понудим>

Так вот решение элементарное, никаких targets и т.п. неудобной лабуды не нужно! Ура!
В VS 2010:

  1. В разделе Builds нажимаем правой кнопкой на какой-либо Build definition и выбираем "Open Process File Location" (Ну Нафиг С Большой Буквы Каждое Слово Каждого Пункта Меню Делать?!) ИЛИ в Source Control заходим в папку BuildProcessTemplates (всегда пугали названия папок без пробела).
  2. Наша жертва - DefaultTemplate.xaml. Открываем её.
  3. Это обычный рабочий процесс (workflow), нам нужно добавить в самый конец просто копирование скомпиленного проекта в директорию нужного нам сайта.
  4. Сначала добавляем AgentScope, называем красиво - WebDeploy (не важно как)
  5. Внутри него добавляем активность - CopyDirectory. Выставляем свойства. По названию свойств догадаетесь что они значат, надеюсь =) BuildDetail - переменная рабочего процесса, посмотрите описание интерфейса IBuildDetail, если хотите от неё ещё чего-то.
    • Destionation = "C:\Inetpub\wwwroot\test\request\"
    • Source = BuildDetail.DropLocation + "/_PublishedWebsites\HelpDeskRequest\"
  6. Всё, сохраняем, Check in, запускаем билд. Рабочий процесс выполнится и скопирует директорию куда надо =)

Комментариев нет: