使用本地加载的组件部署Service Fabric群集,而不是安装所需的组件

时间:2016-10-19 08:52:35

标签: powershell azure deployment azure-service-fabric

在部署Service Fabric Cluster时,我遇到了以下问题。

Connect-ServiceFabricCluster:尝试加载格式不正确的程序。 (HRESULT异常:0x8007000B) 在 XXYYZZ(脚本路径):62 char:2 + Connect-ServiceFabricCluster @ConnectionParams + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     + CategoryInfo:NotSpecified:(:) [Connect-ServiceFabricCluster],BadImageFormatException     + FullyQualifiedErrorId:CreateClusterConnectionErrorId,Microsoft.ServiceFabric.Powershell.ConnectCluster

当我们安装了所需的模块时,Actuall它运行得很好 https://www.microsoft.com/en-in/download/details.aspx?id=30679
http://www.microsoft.com/web/handlers/webpi.ashx?command=getinstallerredirect&appid=MicrosoftAzure-ServiceFabric-CoreSDK

但我们希望从系统安装服务结构集群,其中系统没有所需的Service Fabric组件(在上面的组件中)。现在我们通过将dll放在特定文件夹中并使用名为Import Module的命令,通过Import-Module命令加载这些组件/ modules / dll。我可以知道,我该如何解决这个问题。

1 个答案:

答案 0 :(得分:4)

我正在做同样的事情,并且不想在我们的构建系统上安装Service Fabric SDK。经过一些反复试验后,我终于做对了: 我已将必要的Service Fabric Tools和SDK文件放入源代码控制中,在构建期间检查这些工具,然后在调用Connect-ServiceFabricCluster之前从两者中导入PowerShell模块。我意识到将二进制文件和相关文件放入VCS并不是一个很好的解决方案:将来我很乐意使用像Artifactory这样的东西。

这是解决方案的详细信息。

首先,将必要的工具放入VCS:

  1. 在VCS工作副本中创建一个包含两个子文件夹的文件夹:工具 和SDK。
  2. 复制内容 %WINDIR%\ System32 \ WindowsPowerShell \ v1.0 \ Modules \ ServiceFabric into 工具子文件夹
  3. 从C:\ Program复制所有DLL Files \ Microsoft Service Fabric \ bin \ Fabric \ Fabric.Code进入工具 夹
  4. 从C:\ Program Files \ Microsoft复制所有文件 SDKs \ Service Fabric \ Tools \ PSModule \ ServiceFabricSDK进入SDK 文件夹中。
  5. 将所有这些文件添加到VCS工作副本
  6. 将更改提交给VCS(并推送,如果适用)
  7. 第二步:将工具添加到构建

    第三:在PowerShell脚本中导入工具和SDK模块(我假设Service Fabric工具和SDK位于相对于当前工作目录的ServiceFabric子文件夹中):

    Import-Module ServiceFabric\Tools\Microsoft.ServiceFabric.Powershell.dll
    Import-Module ServiceFabric\SDK\ServiceFabricSDK.psm1
    

    以下是最后的想法: 我使用64位版本的Windows 7,我们所有的构建机器都是64位。老实说,我不知道是否存在32位版本的Service Fabric SDK和工具。无论如何,您需要确保使用的是64位版本的PowerShell。我们使用TeamCity,并明确将Powershell运行模式Bitness设置为x64。

    Service Fabric项目附带的Deploy-FabricApplication.ps1脚本尝试通过读取SDK路径的注册表项然后调用Import-Module来加载Service Fabric SDK模块。由于构建机器没有安装SDK,我还将此脚本的修改副本添加到VCS,注释掉读取注册表并加载模块的行,然后使用-UseExisingClusterConnection参数。