我一直在自己的解決方案(和回購)每個服務和只在部署時帶的東西彙集成一個單一的應用程序。構建和部署通過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被複制到發佈文件夾。腳本完成後,生成的目錄包含正確格式的所有已更改的服務。
下一個腳本是每個羣集的部署腳本。我確信可以創建一個數據驅動的應用程序。這將連接到遠程集羣,測試軟件包,將軟件包上載到映像存儲並根據應用程序是否已存在進行新的升級或升級。我有一個可以部署到我的單箱的版本,所以我可以使用本地配置來測試/調試所有運行在一起的服務。
爲什麼你不能把每個人放在自己的應用程序中的任何原因?無論如何,這就是我所做的。似乎工作得很好。 – Mardoxx
@mardoxx你能詳細說明嗎?你如何決定何時將它們組合在應用程序中而不是? – RPM1984
如果情況需要或不需要;)我不完全確定!我想如果你需要一個簡單的可部署多租戶解決方案,那麼你會在一個應用程序中擁有一切。應用程序的服務可以獨立升級,但對於每個服務在其自己的err soirce存儲庫中獨立開發並不是非常友好。 – Mardoxx