强制 Azure Fabric 使用更新的版本号更新服务
Posted
技术标签:
【中文标题】强制 Azure Fabric 使用更新的版本号更新服务【英文标题】:Force azure fabric to update services with updated version numbers 【发布时间】:2021-08-23 01:50:09 【问题描述】:基本上,我正在寻找一种部署 azure fabrics 的方法,其中只根据版本号更新服务。
我正在通过 azure devops 部署服务结构应用程序。我编写了一个脚本,它执行差异并更新 ApplicationManifest.xml 和 ServiceManifest.xml 上的版本号。此脚本已经过测试,它会为已更改的服务正确更新版本。
现在,当我尝试部署时,我收到以下错误消息:
##[错误]Service Manifest 'MyMicroServicePkg'中CodePackage Name:Code and Version:1.0.111的内容已经改变,但是版本 号码是一样的。
在我更新每个包的版本之前,此错误消息会不断显示一项服务。基本上它迫使我更新每一个包。
这是我正在使用的发布配置文件:
<?xml version="1.0" encoding="utf-8"?>
<PublishProfile xmlns="http://schemas.microsoft.com/2015/05/fabrictools">
<ClusterConnectionParameters .... />
<ApplicationParameterFile Path="..\ApplicationParameters\PublishProfName.xml" />
<CopyPackageParameters CompressPackage="true" />
<UpgradeDeployment Mode="Monitored" Enabled="true">
<Parameters FailureAction="Rollback" Force="True" />
</UpgradeDeployment>
</PublishProfile>
这是 yaml 上的 devops 任务:
- task: ServiceFabricDeploy@1
inputs:
publishProfilePath: $(publishProfilePath)
applicationPackagePath: $(applicationPackagePath)
serviceConnectionName: $ parameters.connection
overrideApplicationParameter: true
upgradeMode: Monitored
FailureAction: Rollback
# 30 mins timeout
UpgradeTimeoutSec: 3600
我在网上查到了这个问题。通常人们谈论如何确保所有代码更改的服务都有版本更新。就我而言,我肯定会针对更改的服务更新版本。
如何配置部署以使其不进行任何代码比较并仅更新具有更新版本的服务?
【问题讨论】:
【参考方案1】:根据我的经验,此处答案的要点是,Service Fabric 仅将整个应用程序部署为每个内部包的单个版本化集合,但您可以访问服务部署的细节以进行自定义。因此,即使您没有对该应用程序中的单个服务进行更改,最终它仍将捆绑在部署到集群的应用程序中,您仍然必须决定是否部署该服务与否(或使用提供的 Deplooy-FabricInstaller.ps1 脚本来处理此类部署)。
我的建议(基于我自己的管道)是,如果您真的相信您的脚本可以正确检测到更改的版本,并且您确实希望避免升级您尚未更改的服务(大概是为了减少部署时间) 是改变你的方法,而不是反对应用程序部署,而是优化服务安装。
像往常一样构建解决方案,并利用 ServiceFabricUpdateManifests@2 任务让它自动替换每个服务的所有版本。
在这一点上,我通常会偏离标准管道。
我有一个脚本可以从 ApplicationManifest.xml 中删除 DefaultServices 以删除自动服务部署 我运行一个单独的脚本来检查应用程序是否已经存在(以告知它是全新部署还是升级) 基于它是安装/升级,我采用不同的部署任务路线并捕获有关集群中现有服务的信息应用程序完全部署后,我编写了一个自定义脚本,该脚本类似于包含的 Deploy-FabricApplication.ps1 脚本,该脚本迭代每个服务并根据它们在新部署中的状态自行安装、升级或删除它们利用 ServiceTemplates 填充配置值。
因为我控制了整个实际的服务安装过程,所以我可以根据我收集并通过构建管道的数据推断出应该和不应该独立于应用程序部署实际部署的内容。
与您所采用的方法相比,您可能会发现采用这条路线的定制过程要容易一些。
【讨论】:
谢谢。我也一直在经历这个,并与 azure 的一些团队进行了讨论。 Deploy-FabricApplication.ps1 在哪里找到? 当您在 Visual Studio 中从模板创建新的 SF 应用程序时,您会在以上是关于强制 Azure Fabric 使用更新的版本号更新服务的主要内容,如果未能解决你的问题,请参考以下文章