MSDeploy安装Windows服务?

时间:2010-10-29 20:26:19

标签: windows-services msdeploy automated-deploy

我们有一个使用NServiceBus发布活动的网站。使用msdeploy部署站点。我们还有NServiceBus.exe作为Windows服务运行来订阅这些事件,我们也想部署它。

有没有办法打包服务以及网站,以便它也可以安装?是否可以单独打包,以便我们可以将其部署到另一台服务器?

有关如何查找有关如何执行此操作的信息的任何提示都很棒,因为我们现在可以自动部署网站。

3 个答案:

答案 0 :(得分:5)

我最近使用MSDeploy,Phantom和installUtil.exe

完成了这项工作

您只需修改安装程序类并在需要时提升远程wmsvc服务权限。

Link to blog

答案 1 :(得分:4)

我们最后做的是创建一个协调部署任务的“控制器”层,即使是可以使用msdeploy的层。从本质上讲,msdeploy并不是我们部署系统中最高级别的抽象。

我们选择使用MSBuild来协调从“包”中部署项目的任务。

在我们的部署过程中,使用msdeploy部署的Web应用程序只是另一个部署项,就像Windows服务一样。

在所有的披露中,我们还没有实际创建msdeploy部署任务,尽管它应该/将会很好地落入我们已经创建的内容,因为MSBuild会调用msdeploy。我们目前使用MSBuild社区任务进行webapp部署自动化,通过MSBuild进行协调。

您可以通过我称之为“PANDA - Packaging ANd Deployment Automation”的博客文章,详细了解我们如何“概括”我们的部署。

答案 2 :(得分:4)

这是一个msdeploy cmd行,用于同步从Windows Service.proj文件中的构建后步骤创建的archivedir。

它正在从我的构建服务器同步到另一个网络上的应用服务器。我有前后构建步骤,可以启动和停止远程服务器上的服务。由于powershell和msdeploy的错误,您必须将powershell脚本包装在vb脚本中。 -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