2010-10-29 220 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