2010-10-29 170 views
24

我们有一个使用NServiceBus发布活动的网站。该网站使用msdeploy进行部署。我们也有NServiceBus.exe,它应该作为一个Windows服务来订阅这些事件,我们也想部署它。MSDeploy安装windows服务?

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

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

+0

我会在你来到这个有什么解决方案很感兴趣。 – 2011-01-18 21:59:06

+0

不幸的是,我们没时间找到解决方案,但我希望能很快再次回到这个话题。 – Andy 2011-01-21 01:56:25

+1

我终于发布了一篇关于我们如何完成此操作的博客文章:http://www.jamescrowley.co.uk/2011/09/05/deploying-windows-services-using-msdeploy/ – 2011-09-05 16:39:47

回答

5

我最近做这个使用MSDeploy,幻影和installUtil.exe

你基本上只是需要修改你的安装程序类,如果需要,提升您的远程WMSVC服务特权。

Link to blog

4

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

我们选择使用MSBuild来协调这些部署来自'包'的项目的任务。

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

在所有的披露中,我们还没有真正创建msdeploy部署任务,尽管它应该很好地落在我们已经创建的东西上,因为MSBuild会调用msdeploy。我们目前使用MSBuild社区任务进行webapp部署自动化,并通过MSBuild进行协调。

您可以阅读更多关于我们如何通过我称为“PANDA - Packaging ANd Deployment Automation”的博客文章“推广”我们的部署。

+0

你曾经打开过吗?采购你的熊猫的东西? – vittore 2015-02-26 16:47:19

+0

不,但谢谢你的兴趣!在这个时候,认为有可用的替代品(甚至在Windows上)来填充该空间(厨师,PowerShell DSC,Octopus Deploy)等。 – 2015-02-26 17:47:15

4

这里是我用来同步是从我的Windows Service.proj文件生成后步骤创建archivedir一个msdeploy CMD线。

它正在从我的构建服务器同步到另一个网络上的应用服务器。我有前期和后期构建步骤,可以启动和停止远程服务器上的服务。由于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