Включение непрерывной интеграции на сервере 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 редактора.