私はそれ独自のソリューション(およびレポ)の各サービスを維持し、唯一のデプロイ時に単一のアプリケーションに一緒に物事をもたらします。ビルドと展開は、PowerShellを使用して行われ、CI/CDプロセスの一部として起動できます。更新されたサービスのみが変更され、現在の日付/時刻を使用してマニフェストのバージョンを自動的に更新します。
他のサービスの依存関係を持つサービスについては、ソリューション内でプロジェクトを参照しているので、簡単にデバッグできますが、プライマリサービスだけが展開されています。
コメントに詳細を追加すると、コメントブロックが小さすぎます。
リリースバージョンを正しいSFディレクトリ構造に配置するためのディレクトリを作成しました。リリースのApplicationManifest.xmlをそのディレクトリにコピーしますが、これをrepoにしてそのファイルだけをチェックすることもできます.reposを列挙し、リリース構成に対してmsbuildを実行するbuildrelease.ps1があります。その設定では、デプロイするサービス以外のものをビルドするつもりはありません(デバッグ用の単体テストや他のテストアプリケーションはありません)。バージョンは日付と時刻に基づいて自動的に生成されます。 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あなたはplsを詳しく説明できますか?アプリケーションとアプリケーションのどちらをグループ化するかをどのように決定するのですか? – RPM1984
状況がそれを必要とするかどうか;)私は完全にはわからない!シンプルなデプロイ可能なマルチテナントソリューションが必要な場合は、すべてのアプリケーションを1つのアプリケーションにまとめることができます。アプリケーションのサービスは独立してアップグレードすることができますが、独自の誤ったリポジトリで独立して開発された各サービスを持つことはあまりあまりありません。 – Mardoxx