升级应用程序时,Test-ServiceFabricApplicationPackage
命令会为版本号未更改的每个代码包抛出错误(即表示内容已更改,即使代码尚未更改)。我知道有一个功能允许创建部分包,但我无法使用它。我的问题是:
ServiceManifest.xml
文件?)Test-ServiceFabricApplicationPackage
(图像存储网址是什么?如何将该参数传递给标准部署脚本?)我很欣赏一个彻底的例子。
答案 0 :(得分:12)
如果您想进行部分升级,我就是这样做的:
鉴于
app1 1.0.1
service1 1.0.1
code 1.0.1
config 1.0.1
service2 1.0.0
code 1.0.0
config 1.0.0
并且您只想将Service 1更新为版本1.0.1,如下所示:
Test-ServiceFabricApplicationPackage $packagePath -ImageStoreConnectionString $ImageStoreConnectionString
在Service1中,更新ServiceManifest.xml以获得正确的版本号(服务本身和要升级的不同软件包)。 然后,在service2文件夹中,删除除ServiceManifest.xml之外的所有内容。
在ApplicationManifest.xml中,应将ServiceManifestImport for Service2保留为1.0.0版。还要为Service1更新ServiceManifestImport的版本号。
完成后,您应该能够:
Open powershell
Connect to your cluster (Connect-ServiceFabricCluster ...)
Execute the following commands:
$ClusterManifestRaw = Get-ServiceFabricClusterManifest
$ClusterManifestXml = [xml]$ClusterManifestRaw
$ManagementSection = $ClusterManifestXml.ClusterManifest.FabricSettings.Section | ? { $_.Name -eq "Management" }
$ImageStoreConnectionString = $ManagementSection .ChildNodes | ? { $_.Name -eq "ImageStoreConnectionString" } | Select-Object -Expand Value
验证包是否有效。这样做(据我所知)是它使用本地包以及当前部署的包,然后这两个组合应该等于一个有效的完整包。
所以,基本上,唯一改变的是:
关于将图像存储用于 Test-ServiceFabricApplicationPackage 调用(您可以通过查看默认部署脚本找到所有内容,但这里是您需要的):
<input type="text" name="userid" id="id />
答案 1 :(得分:6)
Service Fabric支持差异包,但使用差异包的升级尚未与Visual Studio完全集成。但你可以手动完成。
这是一个diff包的例子。想象一下,你有以下几点:
app1 1.0.0
service1 1.0.0
code 1.0.0
config 1.0.0
service2 1.0.0
code 1.0.0
config 1.0.0
并且您只想升级service1的代码包:
app1 2.0.0 <-- new version
service1 2.0.0 <-- new version
code 2.0.0 <-- new version
config 1.0.0
service2 1.0.0
code 1.0.0
config 1.0.0
您更新应用程序和服务清单中的版本,但只包括最终应用程序包中已更改的软件包。您的应用程序包将如下所示:
app1/
service1/
code/
不包括版本号未发生变化的套餐。请注意,可以包含这些包,但前提是它们与当前为群集中的应用程序注册的相同版本的包完全相同(二进制差异),在这种情况下,它们将被忽略。
生成其中一种的快速简便方法是在Visual Studio中使用包命令(右键单击该应用程序并选择“包”)。然后转到输出目录,只需删除版本没有更改的软件包的目录。