2017-05-29 34 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。這是清單中的內容。 –

相關問題