强制 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 应用程序时,您会在 /scripts/Deploy-FabricApplication.ps1 下找到它

以上是关于强制 Azure Fabric 使用更新的版本号更新服务的主要内容,如果未能解决你的问题,请参考以下文章

去除apk升级提示

超级账本Fabric 2.0版本正式发布,重要更新都在这了

有关 Service Fabric 网格限制的任何更新

更新 Service Fabric / VMSS 存储帐户密钥

如何故意使fabric.io中的构建过期

Fabric:“我们正在构建您的受众洞察。请更新到最新版本的 Crashlytics Kit..”