Включение непрерывной интеграции на сервере TFS при сборке проектов Sharepoint 2010

Непрерывная интеграция (Continuous Integration) уже давно используется на средних и больших проектах как средство обеспечения качества и понимания общего прогресса. ALM без этого механизма скорее всего даже не является полноценным процессом обеспечения жизненного цикла продукта. В мире .NET это принятый стандарт в опытных командах. Но когда речь заходит об автоматизации сборок, юнит тестирования и обеспечения CI для проектов на Sharepoint 2010, многие опытные программисты и менеджеры проектов порой начинают сомневаться что этот механизм может работать в такой среде и его настройка не будет сопряжена с массой сложностей. Действительно, если ваш деплоймент порой занимает несколько команд XCOPY, все просто. В мире SharePoint все немного не так. Тем не менее, настроить CI для такой среды можно, и, в общем-то, не так уж сложно. Зато сулит массу выгод и удобств.

В первую очередь это:

  • Консистентные сборки. Если в ваш процесс сборки вовлечен человек, он все же потенциально может ошибиться. Настроенный скрипт ошибаться в тех же условиях не будет, а если что и случится, то это влечет за собой только фиксацию ошибки.
  • Автоматическое версионирование .NET сборок. Мелочь, которая тем не менее позволяет более точно вести диагностику проблем и воспроизведение ошибок.
  • Возможность трекинга кода относительно версий бинарных файлов в боевом окружении через метки исходного кода. Вы легко можете получить те самые исходники из БД контроля версий которые запущены у заказчика.
  • Меньшее время, требуемое для программистов на развертывание окружения для разработки.
  • Сплоченность команды в желании не порушить билд и коммитить качественный код.
  • Автоматическое тестирование. Серебряная пуля CI, которая при некоторых условиях может поубивать немало багов в вашем продукте. Юнит тесты, UI тесты, нагрузочные тесты плюс Code Coverage.
  • Соответствие канонам ALM.

Теория

Первое с чем предстоит определиться, это тип CI который будет использован на проекте. По большому счету их два – 1) воссоздавать полное исходное окружение и 2) делать апдейты к текущему состоянию системы.

Каждый из этих подходов имеет свои достоинства и недостатки, но второй тип при кажущейся очевидности на самом деле более сложен чем первый. Ценой за это является тяжеловесность инфраструктуры CI окружения. Первый тип соответствует тому подходу, который может быть использован в среде Lab Management, когда у вас есть заранее сконфигурированный чистый виртуальный бокс, в который вы в идеальных условиях устанавливаете вновь собранные компоненты вашего решения. Во втором случае, вы работаете «по живому», и должны «подчищать» состояние системы до момента развертывания ваших компонент. Другими словами настраивать ваш скрипт сборки, чтобы он удалял с сервера SharePoint предыдущие веб-части и Solutions, делал retract и прочие действия. В механизмы Build Workflow для TFS 10 уже есть готовые Actions которые выполняют эти шаги.

Определение текущего билда находится в БД контроля версий проекта, просто получите последнюю версию файла xaml на локальный диск и вы уже сможете редактировать его в workflow редакторе:

Шаги которые должны быть определены в этой схеме в первую очередь:

  1. Собственно компиляция (стандартный)
  2. Генерация WSP пакета (стандартный)
  3. Копирование на сервер Sharepoint (стандартная XCopy операция)
  4. Удаление предыдущих версий WSP с сервера (вызов PowerShell)
  5. Развертывание/апгрейд WPS (вызов PowerShell)
  6. Создание тестового сайта (при необходимости) (вызов PowerShell)

При всей кажущейся сложности этих пунктов, стандартный Build Definition уже работоспособен после конфигурации Build Agent, и дополнительные шаги зависят уже от вашего окружения.

Конфигурация

По умолчанию «из коробки» Build Agent TFS 2010 будет не в состоянии скомпилировать проект для SharePoint 2010, в первую очередь из-за того что он ссылается на .NET сборки из поставки SPS 2010. Их надо обязательно скопировать на сервер Build Agent. Вот необходимый минимум:

  • Microsoft.Office.Server.dll
  • Microsoft.Office.Server.UserProfiles.dll
  • Microsoft.SharePoint.Client.dll
  • Microsoft.SharePoint.Client.Runtime.dll
  • Microsoft.SharePoint.Client.ServerRuntime.dll
  • Microsoft.SharePoint.Linq.dll
  • Microsoft.SharePoint.Portal.dll
  • Microsoft.SharePoint.Publishing.dll
  • Microsoft.SharePoint.Taxonomy.dll
  • Microsoft.SharePoint.WorkflowActions.dll
  • Microsoft.Web.CommandUI.dll

Возможно вы будете использовать дополнительные компоненты, не забудьте добавить их в этот перечень и обработать на сервере Build Agent. Более детально шаги, которые необходимо проделать, описаны в MSDN https://msdn.microsoft.com/library/ff622991.aspx

Для того чтобы корректно сконфигурировать Build Agent сервер, пригодится готовый PowerShell скрипт https://archive.msdn.microsoft.com/SPPwrShllTeamBuild/Release/ProjectReleases.aspx?ReleaseId=4210

Этот скрипт соберет всю необходимую информацию с машины программиста:

.\SharePointProjectToTfsBuildServer.ps1 –Collect

и затем произведет необходимые изменения на сервере Build Agent:

.\SharePointProjectToTfsBuildServer.ps1 –Install

Заключение

CI для проектов Sharepoint 2010 сулит немало выгод. Для того чтобы сделать первые шаги в этом направлении достаточно сконфигурировать Build Agent чтобы он был способен компилировать WSP проекты, что может быть проделано с помощью готового PowerShell скрипта. В дальнейшем определение этого билда, в зависимости от вашего окружения может быть дополнено шагами (Actions) с помощью XAML редактора.