2016-02-29 45 views
5

我在Visual Studio團隊服務的服務織物應用程序配置了CI構建,根據該文件:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-set-up-continuous-integration如何從VSTS發佈管道部署服務結構應用程序?

的而不是我的CI構建做出版,我只進行構建和打包的任務但是,並在drop中包含所有Service Fabric相關的輸出,例如pkg文件夾,腳本,發佈配置文件和應用程序參數。通過這種方式,我可以將它傳遞給新的發行版管道(基於代理的發行版),以執行我的服務結構應用程序的實際部署。

在我的發佈定義中,我有一個Azure Powershell任務,它使用ARM端點(配置了適當的服務主體)。

當我將應用程序部署到現有服務結構羣集時,我使用傳遞pkg文件夾的默認Deploy-FabricApplication cmdlet和通過連接配置到現有羣集的發佈配置文件。

該版本失敗,並顯示錯誤消息「羣集連接實例爲空」。我不明白爲什麼?

執行一些調試我發現: Deploy-FabricApplication cmdlet執行Connect-ServiceFabricCluster cmdlet就好了,但只要Publish-NewServiceFabricApplication cmdlet接管執行,集羣連接就會丟失。

我希望這種情況是可以使用服務結構cmdlet,但我不知道如何保持集羣連接在部署期間打開。

更新:指向文檔的鏈接不再提及Service Fabric PowerShell腳本,因此不再記錄此問題的先決條件。該文章現在提到了VSTS構建和發佈任務,可以通過我嘗試使用的powershell cmdlet來選擇這些任務。

+0

您可以共享錯誤日誌嗎?它總是發生嗎?你正在使用哪個代理?通常,運行Publish-NewServiceFabricApplication時不應該丟失集羣連接。 –

回答

23

Connect-ServiceFabricCluster函數被調用時(來自Deploy-FabricApplication.ps1),在調用Connect-ServiceFabricCluster之後設置本地$clusterConnection變量。你可以看到使用Get-Variable

不幸的是,某些SDK腳本中存在邏輯,期望該變量被設置,但是因爲它們運行在不同的範圍內,所以本地變量不可用。

它在Visual Studio中起作用,因爲使用dot source notation調用Deploy-FabricApplication.ps1腳本,該腳本將$clusterConnection變量放入當前範圍。

我不確定在通過發佈管道運行腳本時是否有使用點源的方法,但作爲解決方法,可以通過調用Connect-ServiceFabricCluster設置$clusterConnection變量全局變量。編輯您的Deploy-FabricApplication.ps1腳本和連接邏輯(〜行169)後,添加以下行:

$global:clusterConnection = $clusterConnection 

順便說一句,你可能要考慮設置custom build/release tasks是部署一個服務織物的應用程序,而不是使用各種部署 - FabricApplication.ps1腳本。

+0

Thx的解釋,很快就會試用,我有一個想法,這是由於一些PowerShell變量範圍問題。 一旦我啓動並運行了功能發佈管道,我將研究定製生成任務。 我從Deploy-FabricApplication.ps1開始,因爲它在我鏈接到的文檔中被提及和使用。 – mikanyg

+1

這真的需要被接受的答案 – Steve

+0

接受這個問題 – parek

1

嘗試使用「PowerShell」任務而不是「Azure PowerShell」任務。

+0

使用「純粹」的PowerShell構建任務確保腳本使用。 (點)符號,它像一個魅力。 – mikanyg

1

現在存在一個用於部署Service Fabric應用程序的內置VSTS任務,因此您不再需要自行執行PowerShell腳本。任務文檔頁面爲https://www.visualstudio.com/docs/build/steps/deploy/service-fabric-deploy。最初的CI文章也已更新,其中提供了有關如何設置所有內容的詳細信息:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-set-up-continuous-integration/

+0

看到它一對幾天前,我幾個月前在uservoice上提出這個建議,我真的很開心。 – mikanyg

0

我打的是同樣的bug今天開通了GitHub的問題here

在一個側面說明,VS生成的腳本Deploy-FabricApplication.ps1使用模塊

"$((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" -Name "FabricSDKPSModulePath").FabricSDKPSModulePath)\ServiceFabricSDK.psm1"

這就是Publish-NewServiceFabricApplication從何而來。您可以檢查部署邏輯並使用更低級別的ServiceFabric SDK cmdlet重寫它(可能使用Get-ServiceFabricClusterConnection而不是全局連接來連接)

相關問題