Ответ 1
Недавно я сделал это с помощью MSDeploy, Phantom и installUtil.exe
Вам просто нужно изменить свой класс установщика и при необходимости повысить привилегии службы удаленного wmsvc.
У нас есть сайт, который публикует события, используя NServiceBus. Сайт развертывается с использованием msdeploy. У нас также есть NServiceBus.exe, который должен работать как служба Windows для подписки на эти события, и мы также хотели бы его развернуть.
Есть ли способ упаковать сервис, а также веб-сайт, чтобы его можно было установить? Можно ли упаковать отдельно, чтобы мы могли развернуть его на другой сервер?
Любые советы о том, где найти информацию о том, как это сделать, были бы замечательными, поскольку теперь мы можем сделать автоматическое развертывание для веб-сайта.
Недавно я сделал это с помощью MSDeploy, Phantom и installUtil.exe
Вам просто нужно изменить свой класс установщика и при необходимости повысить привилегии службы удаленного wmsvc.
В результате мы создали слой "controller", который координирует задачи развертывания, даже те, которые могут использовать msdeploy. По сути, msdeploy - это не самый высокий уровень абстракции в нашей системе развертывания.
Мы решили использовать MSBuild для координации этих задач по развертыванию элементов из "пакета".
В нашем процессе развертывания веб-приложение, развернутое с помощью msdeploy, является еще одним элементом развертывания, таким же, как и служба Windows.
Во всех раскрытиях мы пока еще не создали задачи развертывания msdeploy, хотя это должно/было бы неплохо окунуться в то, что мы уже создали, поскольку MSBuild будет ссылаться на msdeploy. В настоящее время мы используем задачи сообщества MSBuild для автоматизации развертывания Webapp, скоординированные через MSBuild.
Вы можете прочитать немного больше о том, как мы "обобщили" наши развертывания через сообщение в блоге, которое я назвал " PANDA - Упаковка и автоматизация развертывания".
Вот строка cmdploy msdeploy, которую я использовал для синхронизации архивированного файла, созданного с этапа после сборки в моем файле Windows Service.proj
.
Это синхронизация с моего сервера сборки на моем сервере приложений в другой сети. У меня есть шаги до и после сборки, которые запускают и останавливают службы на удаленном сервере. Вы должны обернуть powershell script в vb script из-за ошибки с powershell и msdeploy. Опция -verbose
очень полезна.
У меня также есть vbscript и ps1 script ниже. Будьте осторожны со спящим 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 script:
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 script:
$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