34

あなた(あなたの会社)は、あなたが構築したアプリ/システムの構成ファイルをどのように管理していますか? 私たちがどのようにそれを行うのか、そして何が問題なのかをお話ししましょう。

私は、約 15 人の開発者でソフトウェアを開発する会社で働いています。マネージド ホスティング プロバイダーに展開される基幹業務 Web アプリを構築します。主なアプリの 1 つは、1 つの Web サイトと約 10 の WCF サービスで構成されています。一部のサービスは相互に接続されています。

これが大規模なシステムなのか小規模なシステムなのかはわかりませんが、さまざまな環境 (テスト、受け入れ、本番) で物事を立ち上げて実行するには時間がかかりすぎるというのが私の意見です。

Visual Studio プロジェクトには、環境ごとに構成ファイルがあります。したがって、 a web.test.config、 a web.acc.config、 aweb.prod.configおよび aweb.configは開発用です。それらはすべて同じキーを持っていますが、対象の環境に応じて値が異なる場合があります。

web.config で webapp の appsettings を簡単に数えると、32 と数えます。そして、5 つのエンドポイントを数えます。4 つの環境 (dev、test、acc、prod) があります。つまり、1 つの Web アプリに対して合計 128 の appsettings と 20 のエンドポイントがあります。特に締め切りが迫っているときは、間違いを犯しやすいです。

私たちは皆人間なので、次のようなことは誰にでも起こる可能性があります。

  • 構成ファイルの 1 つを変更しましたが、ビルドしてデプロイする前にチェックインするのを忘れました。
  • または、WebServer に変更を加え、それに応じて他の 4 つの web.config を更新するのを忘れています。
  • または、4 つの構成ファイルのうち 3 つだけを変更します。等々。

次に、マネージド ホスティング プロバイダーにインフラストラクチャを用意します。デフォルトでは、すべてのポートが閉じられています。そのため、WCF サービスの 1 つが別のサーバーにある別の WCF サービスと通信する必要がある場合は、ファイアウォールで保護されたポートを開く必要があります。

これは Test で行いますが、Acceptance ではもう一度行う必要があり、どのポートを開く必要があるか忘れてしまったので、試行錯誤のようなものです: ああ、私のサービスはデータベースに接続できません。ポートが閉じています。本番環境でも同様の問題が発生する可能性があります。

SLA によると、当社のマネージド ホスティング プロバイダーは、ファイアウォールでポートを開くのに数日かかる場合があります。したがって、これはすぐにかなり長いプロセスになります。最終的に、テスト、受け入れ、本番稼働までに約 2 か月かかります。

私の質問は、構成、インフラストラクチャ、およびその周辺のプロセスをどのように管理しているのかということです。

4

7 に答える 7

6

Config4 *プロジェクト(免責事項:私はその主要な開発者です)には、.NetまたはWCFとのすぐに使える統合がないため、おそらく役に立たないでしょう。ただし、Config4 *の機能の1つは、質問に関連しています。これは、構成ファイルにif-then-elseステートメントを埋め込んで、ファイルがさまざまな環境(開発、テストなど)に「適応」できるようにする機能です。 、受け入れと生産)。

.Net / WCFベースのプロジェクトで使用している構成構文で機能するようにその概念を変更できる場合があります(これらのテクノロジには精通していませんが、おそらくXMLベースの構成ファイルを使用していると思います) 。特に、たとえばPythonを使用してスクリプトを記述し、if-then-elseステートメントを使用して環境固有のname = valueペアを設定しmap、いくつかのprintステートメントを使用して環境に合わせた構成ファイルのセットを生成できます。 。このようなスクリプトの擬似コードの概要は次のとおりです。

#--------
# Set up configuration variables suitable for a specified environment
#--------
cfg["variable1"] = "default value";
cfg["variable2"] = "another default value";
if (environment == "testing") {
  cfg["variable1"] = "override default value for this environment";
  cfg["variable3"] = "value suitable for this environment";
  ...
} else if (environment == "production") {
  ...
}
#--------
# Now use print statements to generate configuration files
# Alternatively, use the _name=value_ pairs in the map to
# perform global search-and-replace on template versions of
# configuration files.
#--------
...

ボーナスポイントとして、スクリプトは、環境に対して実行する必要のあるテストのチェックリストを生成することもできます。たとえば、「次のエンドポイント間でファイアウォールポートを開く必要があるかどうかを確認します:...」。

于 2012-12-11T21:26:32.963 に答える
4

Ansible テンプレートまたはSaltStackを使用してすべての構成ファイルを簡単に管理できる十分に小さい環境があるようです。

于 2015-07-30T17:32:13.630 に答える
4

これは役立つかもしれません.1つのソースから参照する構成ファイルとサービスの中心的な場所について話しています.

http://blogs.msdn.com/b/youssefm/archive/2010/09/02/loading-wcf-client-configuration-from-different-files-with-configurationchannelfactory.aspx

于 2012-12-07T16:17:58.340 に答える