2017-05-29 36 views
0

我的问题是有点类似this question,但答案并没有真正帮助我,除非我失去了一些东西。引用多个外部Web API的单服务Fabric应用程序

,如果我想10+无状态的服务(基于OWIN的Web API的)从我的ASF的理解部署到服务织物集群,好了,我会:

  1. 在Visual新的服务光纤应用工作室(称之为“MyBackendServices”)
  2. 创建10+无状态的Web API的
  3. 将它们添加到服务光纤应用
  4. 部署到集群中。

但是,这不涉及在与Service Fabric应用程序相同的Visual Studio解决方案中创建所有的Web API吗?

我担心的是,如果我们希望团队完全自治,他们理想的情况是不需要共享相同的Visual Studio解决方案?

当前每个“团队”都有自己的GitHub存储库和Visual Studio解决方案,并且每个API都独立部署。

我希望将此设置移植到ASF,其中每个Web API都是它自己的解决方案,并且它们以某种方式被打包到一个Service Fabric应用程序中。

任何人都可以帮助我吗?

感谢

+0

为什么你不能把每个人放在自己的应用程序中的任何原因?无论如何,这就是我所做的。似乎工作得很好。 – Mardoxx

+0

@mardoxx你能详细说明吗?你如何决定何时将它们组合在应用程序中而不是? – RPM1984

+0

如果情况需要或不需要;)我不完全确定!我想如果你需要一个简单的可部署多租户解决方案,那么你会在一个应用程序中拥有一切。应用程序的服务可以独立升级,但对于每个服务在其自己的err soirce存储库中独立开发并不是非常友好。 – Mardoxx

回答

0

我一直在自己的解决方案(和回购)每个服务和只在部署时带的东西汇集成一个单一的应用程序。构建和部署通过PowerShell进行,可以作为CI/CD进程的一部分进行触发。只有更新的服务被修改,并且我使用当前日期/时间自动更新清单版本。

对于具有其他服务依赖项的服务,我已经在解决方案中引用了它们的项目,以便我可以轻松地进行调试,但只部署了主要服务。

在答案中增加更多细节,注释块太小。

我创建了一个目录,将发布版本放在正确的SF目录结构中。我将该版本的ApplicationManifest.xml复制到该目录中,尽管您可以将其作为回购并仅检查该文件。我有一个buildrelease.ps1,它枚举了回购并为发布配置运行msbuild。对于这种配置,我没有构建任何东西,只是要部署的服务(没有单元测试或其他用于调试的测试应用程序)。该版本根据日期和时间自动生成,例如, 2017_05_31_1702。这是服务清单中更新的内容,最终在应用程序清单中进行更新。创建成功后,服务清单中的解决方案目录更新回这样的:

$serviceManifestPath = "$solutionDir\src\${ServiceName}Service\PackageRoot\ServiceManifest.xml" 
Set-ItemProperty $serviceManifestPath -name IsReadOnly -value $false 

$serviceManifestXml = [xml](Get-Content $serviceManifestPath) 
$ns = New-Object System.Xml.XmlNamespaceManager($serviceManifestXml.NameTable) 
$ns.AddNamespace("ns", $serviceManifestXml.DocumentElement.NamespaceURI) 

$serviceManifestXml.ServiceManifest.Version = $NewVersion 
$serviceManifestXml.ServiceManifest.CodePackage.Version = $NewVersion 
$serviceManifestXml.ServiceManifest.ConfigPackage.Version = $NewVersion 
$serviceManifestXml.Save($serviceManifestPath) 

接下来的MSBuild再次调用打包SFProj。

$buildResult = & $msBuild $sfproj /p:Configuration=Release /nologo /v:M /fl /flp:LogFile="msbuild.log;Verbosity=Normal" /nr:false /target:package 

今天我只是建立具有修改服务清单的服务,所以您必须记住修改代码/配置时修改清单。我想改善这一点,但时间不够。

打包后,解决方案的发布{service name} Service.pkg被复制到发布文件夹。脚本完成后,生成的目录包含正确格式的所有已更改的服务。

下一个脚本是每个群集的部署脚本。我确信可以创建一个数据驱动的应用程序。这将连接到远程集群,测试软件包,将软件包上载到映像存储并根据应用程序是否已存在进行新的升级或升级。我有一个可以部署到我的单箱的版本,所以我可以使用本地配置来测试/调试所有运行在一起的服务。

+0

谢谢,这是我一直在寻找。你有可能分享一些代码片段或文件来说明你是如何实现这一目标的吗?你是否有一个只有服务结构应用程序清单的仓库/ sln?然后,您的CI克隆各种存储库到一个文件夹,然后运行部署脚本,就好像它们总是在一个地方等一样? – RPM1984

+0

确实,我很想看到您对此的回应,todd –

+0

是的,我有一个应用程序包含在一个单一的目录结构中,只有一个ApplicationManifest。然后,我的CI脚本将源的ServiceManifest与相应版本目录中的当前版本进行比较,如果有任何更改,则更新这两个清单中的所有内容的版本并复制代码,配置和数据。我为版本使用生成日期格式,例如2017-11-13-1700。这是清单中的内容。 –

相关问题