Установка пакетов решений Sharepoint с использованием bat-функций

Сегодня для развертывания и администрирования пакетов решений Sharepoint (wsp packages) мы можем использовать богатую функциональность PowerShell-а. Однако и при использовании обычных cmd скриптов есть интересная фича, которую мы можем использовать в разработке под Sharepoint – bat-функции. Конечно они не настолько функциональны, как PowerShell, однако их плюс заключается в их простоте, а также в том, что они не требуют установки дополнительных компонентов в системе. Мы использовали описанный ниже подход в нескольких проектах вместе с wspbuilder-ом, и он доказал свою надежность и полезность. Если вы не знакомы с концепцией bat-функций, то я рекомендую вам прочитать эту статью для примера: Routines functions methods in .bat.

Предположим, что у нас есть решение в Visual Studio с несколькими библиотеками классов (напр. Project1 и Project2), которые собираются в два разных пакета решений Sharepoint (Project1.wsp и Project2.wsp). Пакет Project1 не содержит никаких ресурсов, специфичных для веб приложения,  и должен быть установлен глобально. Пакет Project2, напротив, содержит ресурсы, специфичные для веб приложения, и поэтому должен устанавливаться для конкретных веб приложений. Как можно автоматизировать процесс сборки и установки пакетов решений с помощью bat-функций? Ниже приведен код скрипта, который показывает, как это сделать:

@cd ..
 
@call :install Project1 global
@call :install Project2
 
@pause
@exit
 
rem Makes wsp package, add it to solution store, deploys it and waits some time in order to allow sharepoint successfully install wsp
:install
@cd %1
 
@call :create_wsp %1
 
@call :add_solution %1
 
 
@if "%2" == "global" (
    @call :deploy_solution_globally %1
) else (
    @call :deploy_solution_web_specific %1
)
 
@call :delay 5
 
@cd ..
@exit /b
 
 
rem Creates wsp based on current directory
:create_wsp
wspbuilder -BuildWSP true -ResetWebServer true -TraceLevel Warning
@exit /b
 
 
rem Adds wsp file in the current directory to solution store
:add_solution
stsadm -o addsolution -filename %1.wsp
@exit /b
 
 
rem Deploys wsp from current directory to specific web applications (i.e. not globally)
:deploy_solution_web_specific
stsadm -o deploysolution -local -allowgac -allcontenturls -name %1.wsp
@exit /b
 
 
rem Deploys wsp from current directory globally
:deploy_solution_globally
stsadm -o deploysolution -local -allowgac -name %1.wsp
@exit /b
 
 
rem Delays execution
:delay
@echo Off
PING -n %1 127.0.0.1>nul
@echo On
@exit /b

Для того, чтобы сделать скрипт более понятным, я добавил в него комментарии. Каждая функция начинается с двоеточия “:” и заканчивается командой “@exit /b”, которая возвращает управление вызывающей стороне. Как видно из кода, мы вызываем функцию install для проектов Project1 и Project2. Что делает эта функция? Прежде всего, она создает wsp пакет, используя wspbuilder (см. функцию create_wsp). Затем она добавляет созданный wsp пакет в хранилище пакетов решений в Sharepoint (функция add_solution) с использованием команды stsadm addsolution и устанавливает его на сервер. Обратите внимание, что для Project1 мы передаем дополнительный параметр “global”, который используется в функции install для определения способа установки пакета – глобально (функция deploy_soluiton_globally) или в определенное веб приложение (deploy_solution_web_specific). В моем примере показан случай установки на локальный сервер (параметр local в команде утилиты stsadm deploysolution), но вы можете без проблем расширить его на случай фермы.

После того, как пакет установлен функция install ждет некоторое время для того, чтобы дать Sharepoint-у время выполнить установку (в противном случае установка следующего пакета может завершиться с ошибкой). Обратите внимание на реализацию функции delay в cmd скрипте: используется дополнительный параметр команды ping с выводом в nil для ожидания переданного количества секунд.

Так вы можете использовать эту возможность обычных cmd скриптов в Sharepoint разработке для автоматизации простых сценариев. Конечно, для более сложных вещей лучше использовать PowerShell, однако для многих реальных сценариев описанная техника также будет полезной.

Реклама

Об авторе sadomovalex

Старший инженер, team lead, консультант. Работаю в стеке .Net. Последние несколько лет занимаюсь разработкой enterprise приложений под Sharepoint, чему и будет в основном посвящена тематика этого блога. Также активно использую и интересуюсь ASP.Net MVC, DDD, TDD, Agile. Активно участвую в жизни многих профессиональных сообществ, SPb .Net UG, SPb ALT.Net, rsdn, Finland SP UG и др.
Запись опубликована в рубрике Sharepoint, WSPBuilder. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s