Service Fabric 服务版本升级部署在 VSTS 版本上失败

Deployment for Service Fabric service version upgrade fails on VSTS Release

总结

日志中出现以下错误。

The content in ConfigPackage Name:Config and Version:1.0.0.20180315.2 in Service Manifest 'TwoServicePkg' has changed, but the version number is the same.

我只更改了其中一项服务的代码,所以我只更改了清单中的一个版本的代码。

这样的话,通过Visual Studio升级是没有问题的。

但是通过VSTS升级会出现上述错误

详情

我默认为 Service Fabric 创建了 VSTS CI/CD。 (管道:VSTS Git 回购 -> 构建 -> 发布)

第一个'Commit > Build > Release'可以。

Service Fabric 清单版本

MyAppType: 1.0.0
  OneService: Pkg 1.0.0 / Code 1.0.0 / Config 1.0.0
  TwoService: Pkg 1.0.0 / Code 1.0.0 / Config 1.0.0

现在,我只修复 OneService 代码。并编辑服务结构清单的版本。

Service Fabric 清单版本

MyAppType: 1.0.1(*)
  OneService: Pkg 1.0.1(*) / Code 1.0.1(*) / Config 1.0.0
  TwoService: Pkg 1.0.0 / Code 1.0.0 / Config 1.0.0

第二次提交 > 构建正常。但是发布失败。 日志中出现以下错误。

The content in ConfigPackage Name:Config and Version:1.0.0.20180315.2 in Service Manifest 'TwoServicePkg' has changed, but the version number is the same.

但是我没有修改TwoService Pkg (Both Code, Config)

此外,通过 VS2017 IDE 立即发布到 'Azure Cloud Service Fabric Cluster' 也很好。 (当然,勾选了'Upgrade the Application'选项。)

当前的临时解决方案是像下面那样对所有(所有 pkg​​/代码/配置)进行版本升级。

Service Fabric 清单版本

MyAppType: 1.0.1(*)
  OneService: Pkg 1.0.1(*) / Code 1.0.1(*) / Config 1.0.1(*)
  TwoService: Pkg 1.0.1(*) / Code 1.0.1(*) / Config 1.0.1(*)

我想构建构建管道,但是很混乱。


附加信息

我只使用默认的 VSTS Service Fabric 模板。

并且仅修改发布配置文件名称 (Cloud.xml -> Cloud.Development.xml)。

发布任务截图

如错误消息所示,您收到的错误:

'The content in ConfigPackage Service Manifest 'PackageName' has changed, but the version number is the same.

意思是:我们在这个包里发现了一些和以前版本不匹配的东西,因为你说版本应该是一样的,他们应该匹配,所以我不知道该怎么办让你解决这个问题。

消息不是很有暗示性,所以第一眼你就迷路了。

我已经在这里回答了同样的问题,请检查答案是否能帮助您解决问题。

我再解释一下:

每当你注册一个应用程序时,service fabric 都会将正在注册的新版本与服务器中当前的版本进行比较,如果相同的服务版本已经存在,它将比较包、配置包、代码包依此类推,如果其中任何一个不匹配,将导致部署失败。

其中任何一个的每一个小变化,都应该触发版本升级,例如,如果你在 Setting.xml 中添加或删除配置设置,你必须升级你的配置文件的版本和一个服务清单。

之前:

app1 -------> 1.0.0
  service1 -> 1.0.0
    code ---> 1.0.0
    config -> 1.0.0

之后

app1 -------> 1.0.1
  service1 -> 1.0.1
    code ---> 1.0.0
    config -> 1.0.1

对于代码包也是如此,如果同时升级代码和配置,应该只升级服务清单一个版本,如:

app1 -------> 1.0.1
  service1 -> 1.0.1
    code ---> 1.0.1
    config -> 1.0.1

这里最棘手的挑战是代码更改,每当触发新构建时,构建都会下载源代码并编译所有内容,您知道根据提交更改更改了什么,但是对于构建,所有内容都会生成程序集,所以它不关心它是否改变,它会生成一个新的程序集,尽管代码与以前构建的代码相同,但大多数时候输出二进制文件会有所不同。

通过应用程序注册,如果版本保持不变,这些二进制文件应该与现有的二进制文件匹配,不会发生什么。为了解决这个问题,差异包装加入了派对,我不会在这里给出太多细节,因为超出了这个答案的范围,但你可以通过这些链接获得更多信息:

Service Fabric Application with a diff package