MSDeploy для установки службы Windows?

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

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

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


person Andy    schedule 29.10.2010    source источник
comment
Мне было бы очень интересно, к какому решению вы пришли по этому поводу.   -  person James Crowley    schedule 19.01.2011
comment
К сожалению, у нас не хватило времени, чтобы найти решение, но я надеюсь скоро вернуться к этой теме.   -  person Andy    schedule 21.01.2011
comment
Я наконец опубликовал в блоге сообщение о том, как мы это сделали: jamescrowley.co.uk/2011/09/05/   -  person James Crowley    schedule 05.09.2011


Ответы (3)


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

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

Ссылка на блог

person Christian Westman    schedule 13.03.2011

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

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

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

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

Вы можете прочитать немного больше о том, как мы «обобщили» наши развертывания, из сообщения в блоге, которое я назвал "PANDA - Автоматизация упаковки и развертывания".

person Zach Bonham    schedule 16.11.2010
comment
Вы когда-нибудь открывали исходный код своих материалов PANDA? - person vittore; 26.02.2015
comment
Нет, но спасибо за проявленный интерес! На данный момент подумайте, есть ли доступные альтернативы (даже в Windows), чтобы заполнить это пространство (шеф-повар, PowerShell DSC, Octopus Deploy) и т. Д. - person Zach Bonham; 26.02.2015

Вот строка cmd msdeploy, которую я использовал для синхронизации архива, созданного на этапе после сборки в моем Windows Service.proj файле.

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

У меня также есть сценарии vbscript и ps1 ниже. Будьте осторожны с режимом сна VB и тайм-аутами до и после развертывания 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
person RKibbe    schedule 09.09.2011