【问题标题】:Deployment for Service Fabric service version upgrade fails on VSTS Release在 VSTS 版本上部署 Service Fabric 服务版本升级失败
【发布时间】:2018-08-25 07:06:32
【问题描述】:

总结

日志中出现以下错误。

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 -> 构建 -> 发布)

首先“提交 > 构建 > 发布”就可以了。

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”也很好。 (当然,“升级应用程序”选项已选中。)

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

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

发布任务截图

【问题讨论】:

  • 您的 VSTS 构建管道是什么样的,您正在使用哪些任务以及它们是如何配置的?
  • 感谢您的关注。我添加了屏幕截图。
  • 你能在 OneDrive 上分享详细的构建日志吗? (将 system.debug 变量设置为 true,然后排队构建并共享此日志)您能否在新项目中重现此问题?如果是这样,您可以在 OneDrive 上共享示例项目。
  • 检查是否与确定性编译器标志有关:stackoverflow.com/questions/49236009/…
  • @starianchen-MSFT 我使用了默认模板并确认该选项已打开。该项目没有什么特别之处。 github 中的服务结构示例也会产生相同的错误。但在你的回答中,我有一些信息,它似乎很有帮助。谢谢你的回复。

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


【解决方案1】:

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

'ConfigPackage Service Manifest 'PackageName' 中的内容有 改了,但是版本号是一样的。

也就是说:我们在这个包中发现了一些与之前版本不匹配的东西,因为你说版本应该相同,它们应该匹配,所以我不知道该怎么做,让你解决这个问题。

该消息不是很具有暗示性,因此乍一看您会迷路。

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

我再解释一下:

每当你注册一个应用程序时,Service Fabric 都会比较正在注册的新版本和服务器中当前的版本,如果已经存在相同的服务版本,它会比较包、配置包、代码包等on,如果其中任何一个不匹配,则部署失败。

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

【讨论】:

  • 谢谢。我试图检查“部署服务结构应用程序”的“使用差异包”。然后,正常执行升级。在您链接到的页面上,提到了以下内容。使用 Visual Studio 升级应用程序时,会自动发布差异包。要手动创建差异包,必须更新应用程序清单和服务清单,但只有更改的包才应包含在最终应用程序包中。所以(也许)我能够将 VSTS CD 制作成 VS2017 环境并且它可以工作。
  • 但我仍有疑问。为什么默认关闭 VSTS Service Fabric 发布模板?如果您正在为生产配置 VSTS CI/CD,我想知道您推荐的设置。
  • VSTS的'Use Diff Package'选项和VS2017 Publish选项的'Upgrade the Application'效果一样吗? (即必须先关闭,下次升级再开启)
  • 在 VSTS 上,您有两个用于服务结构的 CI 步骤,一个是更新清单版本,另一个是部署 SF 应用程序。如果您想在每次构建时升级清单版本,您应该使用更新任务并部署它们。默认是关闭的,因为每次升级所有服务比创建差异化打包要容易,差异化打包非常棘手,需要更深入地了解事物在 SF 中是如何工作的。
  • 它们略有不同,但总体结果几乎相同。我不记得确切的区别了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 2023-03-31
  • 2019-05-31
  • 1970-01-01
  • 2019-02-11
  • 2017-08-06
  • 2018-11-27
相关资源
最近更新 更多