如何从 VSTS 发布管道部署服务结构应用程序?
How do I deploy service fabric application from VSTS release pipeline?
我已根据此文档在 Visual Studio Team Services 中为 Service Fabric 应用程序配置 CI 构建:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-set-up-continuous-integration
但是我没有让 CI 构建进行发布,我只执行构建和打包任务,并包括所有 Service Fabric 相关输出,例如 pkg 文件夹、脚本、发布配置文件和应用程序参数,在下降。这样我就可以将它传递到新的发布管道(基于代理的发布)来实际部署我的服务结构应用程序。
在我的发布定义中,我有一个 Azure Powershell 任务,它使用 ARM 端点(配置了适当的服务主体)。
当我将我的应用程序部署到现有服务结构集群时,我使用默认的 Deploy-FabricApplication cmdlet 传递 pkg 文件夹和配置为连接到现有集群的发布配置文件。
发布失败并显示错误消息 "Cluster connection instance is null"。我不明白为什么?
进行一些调试后我发现:
Deploy-FabricApplication cmdlet 可以很好地执行 Connect-ServiceFabricCluster cmdlet,但是一旦 Publish-NewServiceFabricApplication cmdlet 接管执行,集群连接就会丢失。
我希望使用 service fabric cmdlet 可以实现这种情况,但我不知道如何在部署期间保持集群连接打开。
更新:文档的 link 不再引用 Service Fabric powershell 脚本,因此不再记录此问题的先决条件。这篇文章现在提到了 VSTS 构建和发布任务,它比我尝试使用的 powershell cmdlet 更受欢迎。
尝试使用 "PowerShell" 任务而不是 "Azure PowerShell" 任务。
当调用 Connect-ServiceFabricCluster
函数时(从 Deploy-FabricApplication.ps1),在调用 Connect-ServiceFabricCluster
之后设置一个本地 $clusterConnection
变量。您可以使用 Get-Variable
看到这一点。
不幸的是,某些 SDK 脚本中的逻辑期望设置该变量,但由于它们 运行 在不同的范围内,该局部变量不可用。
它在 Visual Studio 中有效,因为 Deploy-FabricApplication.ps1 脚本是使用 dot source notation 调用的,它将 $clusterConnection
变量放入当前范围。
我不确定在通过发布管道 运行ning 脚本时是否有使用点源的方法,但作为解决方法,您可以使 $clusterConnection
变量成为全局变量在通过 Connect-ServiceFabricCluster
调用设置之后。编辑您的 Deploy-FabricApplication.ps1
脚本并在连接逻辑(~第 169 行)之后添加以下行:
$global:clusterConnection = $clusterConnection
顺便说一下,您可能要考虑设置 custom build/release tasks 来部署 Service Fabric 应用程序,而不是使用各种 Deploy-FabricApplication。ps1 脚本。
现在有一个用于部署 Service Fabric 应用程序的内置 VSTS 任务,因此您不再需要自己执行 PowerShell 脚本。任务文档页面位于 https://www.visualstudio.com/docs/build/steps/deploy/service-fabric-deploy. The original CI article has also been updated which provides details on how to set everything up: https://azure.microsoft.com/en-us/documentation/articles/service-fabric-set-up-continuous-integration/.
我今天遇到了同样的错误并打开了一个 GitHub 问题 here
附带说明一下,VS 生成的脚本 Deploy-FabricApplication.ps1
使用模块
"$((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" -Name "FabricSDKPSModulePath").FabricSDKPSModulePath)\ServiceFabricSDK.psm1"
这就是 Publish-NewServiceFabricApplication
的来源。您可以使用 lower-level ServiceFabric SDK cmdlet 检查部署逻辑并以更理智的方式重写它(可能使用 Get-ServiceFabricClusterConnection
而不是 global-ling 获取连接)
我已根据此文档在 Visual Studio Team Services 中为 Service Fabric 应用程序配置 CI 构建:https://azure.microsoft.com/en-us/documentation/articles/service-fabric-set-up-continuous-integration
但是我没有让 CI 构建进行发布,我只执行构建和打包任务,并包括所有 Service Fabric 相关输出,例如 pkg 文件夹、脚本、发布配置文件和应用程序参数,在下降。这样我就可以将它传递到新的发布管道(基于代理的发布)来实际部署我的服务结构应用程序。
在我的发布定义中,我有一个 Azure Powershell 任务,它使用 ARM 端点(配置了适当的服务主体)。
当我将我的应用程序部署到现有服务结构集群时,我使用默认的 Deploy-FabricApplication cmdlet 传递 pkg 文件夹和配置为连接到现有集群的发布配置文件。
发布失败并显示错误消息 "Cluster connection instance is null"。我不明白为什么?
进行一些调试后我发现: Deploy-FabricApplication cmdlet 可以很好地执行 Connect-ServiceFabricCluster cmdlet,但是一旦 Publish-NewServiceFabricApplication cmdlet 接管执行,集群连接就会丢失。
我希望使用 service fabric cmdlet 可以实现这种情况,但我不知道如何在部署期间保持集群连接打开。
更新:文档的 link 不再引用 Service Fabric powershell 脚本,因此不再记录此问题的先决条件。这篇文章现在提到了 VSTS 构建和发布任务,它比我尝试使用的 powershell cmdlet 更受欢迎。
尝试使用 "PowerShell" 任务而不是 "Azure PowerShell" 任务。
当调用 Connect-ServiceFabricCluster
函数时(从 Deploy-FabricApplication.ps1),在调用 Connect-ServiceFabricCluster
之后设置一个本地 $clusterConnection
变量。您可以使用 Get-Variable
看到这一点。
不幸的是,某些 SDK 脚本中的逻辑期望设置该变量,但由于它们 运行 在不同的范围内,该局部变量不可用。
它在 Visual Studio 中有效,因为 Deploy-FabricApplication.ps1 脚本是使用 dot source notation 调用的,它将 $clusterConnection
变量放入当前范围。
我不确定在通过发布管道 运行ning 脚本时是否有使用点源的方法,但作为解决方法,您可以使 $clusterConnection
变量成为全局变量在通过 Connect-ServiceFabricCluster
调用设置之后。编辑您的 Deploy-FabricApplication.ps1
脚本并在连接逻辑(~第 169 行)之后添加以下行:
$global:clusterConnection = $clusterConnection
顺便说一下,您可能要考虑设置 custom build/release tasks 来部署 Service Fabric 应用程序,而不是使用各种 Deploy-FabricApplication。ps1 脚本。
现在有一个用于部署 Service Fabric 应用程序的内置 VSTS 任务,因此您不再需要自己执行 PowerShell 脚本。任务文档页面位于 https://www.visualstudio.com/docs/build/steps/deploy/service-fabric-deploy. The original CI article has also been updated which provides details on how to set everything up: https://azure.microsoft.com/en-us/documentation/articles/service-fabric-set-up-continuous-integration/.
我今天遇到了同样的错误并打开了一个 GitHub 问题 here
附带说明一下,VS 生成的脚本 Deploy-FabricApplication.ps1
使用模块
"$((Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" -Name "FabricSDKPSModulePath").FabricSDKPSModulePath)\ServiceFabricSDK.psm1"
这就是 Publish-NewServiceFabricApplication
的来源。您可以使用 lower-level ServiceFabric SDK cmdlet 检查部署逻辑并以更理智的方式重写它(可能使用 Get-ServiceFabricClusterConnection
而不是 global-ling 获取连接)