2017-05-29 21 views
0

私の質問はと多少似ていますthis questionですが、何か不足している場合を除き、答えは本当に助けになりません。複数の外部Web APIを参照する単一サービスファブリックアプリケーション

私は、うまくASFの私の理解から、サービスファブリッククラスタに10+ステートレスサービス(OWINベースのWeb APIの)を考え展開する場合:

  1. は、Visualでの新しいサービスファブリックアプリケーションを作成します。スタジオ(「MyBackendServices」それを呼び出す)
  2. はステートレスWeb APIの
  3. クラスタに
  4. サービスファブリックアプリケーションへの展開を、それらを追加10+作成します。

しかし、これは、サービスファブリックアプリケーションと同じVisual StudioソリューションにすべてのWeb APIを作成するということではありませんか?

チームが完全に自律的であることを望むなら、理想的には同じVisual Studioソリューションを共有する必要はありません。

現在、「チーム」にはそれぞれ独自のGitHubリポジトリとVisual Studioソリューションがあり、各APIは個別に展開されます。

この設定をASFに移植することを望んでいました。各Web APIは独自のソリューションであり、何らかの形でService Fabricアプリケーションにパッケージ化されています。

誰もが私にこれを助けることができますか?

おかげ

+0

あなたは自分のアプリケーションにそれぞれを入れることができない理由は何ですか?とにかくそれは私がやっていることです。かなりうまくいくと思われる。 – Mardoxx

+0

@mardoxxあなたはplsを詳しく説明できますか?アプリケーションとアプリケーションのどちらをグループ化するかをどのように決定するのですか? – RPM1984

+0

状況がそれを必要とするかどうか;)私は完全にはわからない!シンプルなデプロイ可能なマルチテナントソリューションが必要な場合は、すべてのアプリケーションを1つのアプリケーションにまとめることができます。アプリケーションのサービスは独立してアップグレードすることができますが、独自の誤ったリポジトリで独立して開発された各サービスを持つことはあまりあまりありません。 – Mardoxx

答えて

0

私はそれ独自のソリューション(およびレポ)の各サービスを維持し、唯一のデプロイ時に単一のアプリケーションに一緒に物事をもたらします。ビルドと展開は、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がリリースフォルダにコピーされます。スクリプトが完了すると、結果のディレクトリには、変更されたサービスがすべて正しい形式で格納されます。

次のスクリプトは、クラスタごとの展開スクリプトです。私は、データ駆動型のものを作成できると確信しています。これは、リモートクラスタに接続し、パッケージをテストし、パッケージをイメージストアにアップロードし、アプリケーションがすでに存在するかどうかに応じて新規またはアップグレードを実行します。私はこれを私のワンボックスにデプロイできるバージョンを持っているので、ローカル設定を使ってすべてのサービスを一緒に実行してテスト/デバッグすることができます。

+0

ありがとう、これは私が探していたものです。あなたがこれを達成した方法に関するいくつかのコードスニペットやドキュメントを共有する可能性はありますか?サービスファブリックアプリケーションマニフェストだけでリポジトリ/ slnを持っていますか?次に、CIクローンがフォルダのさまざまなリポジトリにすべての場所にあるかのようにdeployスクリプトを実行します。 – RPM1984

+0

本当に私はあなたの応答を見たいと思っています。 –

+0

はい、1つのApplicationManifestを持つ単一のディレクトリ構造に1つのアプリケーションが含まれています。私のCIスクリプトは、ソースのServiceManifestを対応するリリースディレクトリの現在のバージョンと比較します。変更があれば、両方のマニフェストのすべてのバージョンを更新し、コード、設定、データをコピーします。私はバージョンの生成に日付形式を使用します。 2017-11-13-1700。これがマニフェストに入れられるものです。 –

関連する問題