2010-10-29 11 views
24

У нас есть сайт, который публикует события, используя NServiceBus. Сайт развертывается с использованием msdeploy. У нас также есть NServiceBus.exe, который должен работать как служба Windows для подписки на эти события, и мы также хотели бы его развернуть.MSDeploy для установки службы Windows?

Есть ли способ упаковать сервис, а также веб-сайт, чтобы его можно было установить? Можно ли упаковать отдельно, чтобы мы могли развернуть его на другой сервер?

Любые советы о том, где найти информацию о том, как это сделать, было бы замечательно, так как теперь мы можем сделать автоматическое развертывание для веб-сайта.

+0

Я был бы очень заинтересован в том, что решение, которое вы пришли на это. –

+0

К сожалению, у нас не хватало времени, чтобы найти решение, но я надеюсь снова вернуться к этой теме в ближайшее время. – Andy

+1

Я наконец опубликовал сообщение в блоге о том, как мы это сделали: http://www.jamescrowley.co.uk/2011/09/05/deploying-windows-services-using-msdeploy/ –

ответ

5

Недавно я сделал это с помощью MSDeploy, Фантом и Installutil.exe

Вы просто в основном придется изменить класс установки и повысить свои привилегии удаленных wmsvc службы, если это необходимо.

Link to blog

4

Что мы сделали, это создание слоя «контроллера», который координирует задачи развертывания, даже те, которые могут использовать msdeploy. По сути, msdeploy - это не самый высокий уровень абстракции в нашей системе развертывания.

Мы решили использовать MSBuild для координации этих задач по развертыванию элементов из «пакета».

В нашем процессе развертывания веб-приложение, развернутое с помощью msdeploy, является еще одним элементом развертывания, как и служба Windows.

Во всех раскрытиях мы пока еще не создали задачи развертывания msdeploy, хотя это должно было бы/было бы неплохо уйти от того, что мы уже создали, поскольку MSBuild будет вызывать msdeploy. В настоящее время мы используем задачи сообщества MSBuild для автоматизации развертывания Webapp, координируемые через MSBuild.

Вы можете прочитать немного больше о том, как мы «обобщили» наши развертывания через сообщение в блоге, которое я назвал «PANDA - Packaging ANd Deployment Automation».

+0

Вы когда-нибудь открывали заработал ваш материал PANDA? – vittore

+0

Нет, но спасибо за интерес! На данный момент, подумайте, что есть доступные альтернативы (даже в Windows), чтобы заполнить это пространство (шеф-повар, PowerShell DSC, Octopus Deploy) и т. Д. –

4

Вот MSDeploy CMD линия, которую я использовал, чтобы синхронизировать archivedir, который создается из шага после построения в моем Windows Service.proj файле.

Это синхронизация с моего сервера сборки на моем сервере приложений в другой сети. У меня есть шаги до и после сборки, которые запускают и останавливают службы на удаленном сервере. Вы должны свернуть скрипт powershell в скрипте vb из-за ошибки с powershell и msdeploy. Опция -verbose очень полезна.

У меня также есть сценарий vbscript и ps1 ниже. Будьте осторожны со спящим VB и таймаутами pre и post msdeploy.

msdeploy -verb:sync -source:archivedir=\\qa-xxxxx1.qa.lan\deployment\backups\FreddieMacDelivery\FreddieMacDelivery.zip,tempAgent='True',computerName=qa-xxxxx1.qa.lan,userName=QA\xxxxx,password=xxxx,authtype=NTLM,includeAcls='False' -dest:dirpath=\\qa-xxxxxx1.qa.lan\protk\Services\FreddieMacDelivery\1.4.1.test -useCheckSum -verbose -preSync:runCommand="cscript.exe c:\temp\stop_win_svc.vbs" -postSync:runCommand="c:\temp\start_win_svc.vbs",waitInterval=15000,waitAttempts=1 

VB скрипт:

Option Explicit 
Dim oShell, appCmd,oShellExec 
Set oShell = CreateObject("WScript.Shell") 

appCmd = "powershell.exe -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ""&c:/temp/Get_Win_SVC.ps1"" " 

Set oShellExec = oShell.Exec(appCmd) 

WScript.Sleep 1000 
oShellExec.StdIn.Close() 

Powershell скрипт:

$username = 'QA\xxxxx' 
$password = 'xxxxx' 
$cred = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force)) 

(Get-WmiObject -computer qa-xxxx1.qa.lan -Credential $cred Win32_Service -Filter "Name='ProTeck.FreddieMac.DeliveryService'") 


$svc = (Get-WmiObject -computer qa-xxxxx1.qa.lan -Credential $cred Win32_Service -Filter "Name='ProTeck.FreddieMac.DeliveryService'") 

Write-Host $svc 

$svc.InvokeMethod("StartService", $null) 


(Get-WmiObject -computer qa-xxxxx1.qa.lan -Credential $cred Win32_Service -Filter "Name='ProTeck.FreddieMac.DeliveryService'")> c:\temp\win_stat_post.txt