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

时间:2018-03-16 09:15:14

标签: azure azure-devops azure-service-fabric azure-pipelines-release-pipeline

摘要

日志中出现以下错误。

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 Repo - > Build - > Release)

首先'提交>构建>发布'好的。

Service Fabric Manifest版本

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 Manifest版本

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(代码,配置)。

此外,立即通过VS2017 IDE发布到“Azure Cloud Service Fabric Cluster”是件好事。 (当然,选中“升级应用程序”选项。)

目前的临时解决方案是对所有(所有pkg / code / config)进行版本升级,如下所示。

Service Fabric Manifest版本

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)。

发布任务截图 Release Task Screenshot

1 个答案:

答案 0 :(得分:5)

您收到的错误显示错误消息:

  

' ConfigPackage 服务清单' PackageName '中的内容已包含   已更改,但版本号相同。

这意味着:我们在这个软件包中找到了与先前版本不匹配的东西,因为你说版本应该是相同的,它们应该匹配,所以我不知道该做什么会让你修复它。

这条消息不是很具有启发性,所以乍看之下你会迷失方向。

我在error-while-upgrading-azure-service-fabric-through-vsts-ci-cd回答了同样的问题,请检查答案是否可以帮助您解决问题。

我会再解释一下:

每当您注册一个应用程序时,服务结构会将正在注册的新版本与当前服务器中的版本进行比较,如果已经存在相同的服务版本,它将比较软件包,配置包,代码包等等。如果它们中的任何一个不匹配,它将无法部署。

其中任何一项的小改动都应该触发版本升级,例如,如果在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

StackOverflow Question: Differential Packaging