2016-02-29 39 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而不是全局连接来连接)

相关问题