我們有一個使用NServiceBus發佈活動的網站。該網站使用msdeploy進行部署。我們也有NServiceBus.exe,它應該作爲一個Windows服務來訂閱這些事件,我們也想部署它。MSDeploy安裝windows服務?
是否有任何方法來打包服務以及網站,以便它可以安裝?是否可以單獨打包,以便我們可以將其部署到另一臺服務器?
有關如何執行此操作的信息的任何提示都非常棒,因爲我們現在可以爲網站進行自動部署。
我們有一個使用NServiceBus發佈活動的網站。該網站使用msdeploy進行部署。我們也有NServiceBus.exe,它應該作爲一個Windows服務來訂閱這些事件,我們也想部署它。MSDeploy安裝windows服務?
是否有任何方法來打包服務以及網站,以便它可以安裝?是否可以單獨打包,以便我們可以將其部署到另一臺服務器?
有關如何執行此操作的信息的任何提示都非常棒,因爲我們現在可以爲網站進行自動部署。
我們最終做的是創建一個協調部署任務的'控制器'層,即使是可以使用msdeploy的層。從本質上講,msdeploy不是我們部署系統中最高級別的抽象。
我們選擇使用MSBuild來協調這些部署來自'包'的項目的任務。
在我們的部署過程中,使用msdeploy部署的Web應用程序只是另一個部署項目,就像Windows服務一樣。
在所有的披露中,我們還沒有真正創建msdeploy部署任務,儘管它應該很好地落在我們已經創建的東西上,因爲MSBuild會調用msdeploy。我們目前使用MSBuild社區任務進行webapp部署自動化,並通過MSBuild進行協調。
您可以閱讀更多關於我們如何通過我稱爲「PANDA - Packaging ANd Deployment Automation」的博客文章「推廣」我們的部署。
你曾經打開過嗎?採購你的熊貓的東西? – vittore 2015-02-26 16:47:19
不,但謝謝你的興趣!在這個時候,認爲有可用的替代品(甚至在Windows上)來填充該空間(廚師,PowerShell DSC,Octopus Deploy)等。 – 2015-02-26 17:47:15
這裏是我用來同步是從我的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
我會在你來到這個有什麼解決方案很感興趣。 – 2011-01-18 21:59:06
不幸的是,我們沒時間找到解決方案,但我希望能很快再次回到這個話題。 – Andy 2011-01-21 01:56:25
我終於發佈了一篇關於我們如何完成此操作的博客文章:http://www.jamescrowley.co.uk/2011/09/05/deploying-windows-services-using-msdeploy/ – 2011-09-05 16:39:47