3

シナリオは次のとおりです。 - 同じソース コードと独自のデータベースを持つ Web サイトが多すぎる (各顧客は独自のデータベースを持つ独自のシステムを持っていますが、すべての顧客が同じソース コードを使用しています)。

  • すべての顧客が同じコードを使用しているため (各 Web サイトで各顧客に展開する必要があるため、物理的にではありません)、TFS プロジェクトは 1 つしかありません。

質問: 1 つの Web サイト (VS 2012 - Web Deploy から) に展開し、他のすべての Web サイトを自動的に更新して、web.config を正しく変更するにはどうすればよいですか (現在、各展開設定には web.config connectionString を変更するための構成があります)。 .

簡単にするために、現在、すべての展開設定があります (Customer1 - Web Deploy、Customer2 - Web Deploy ....) 動作しますが、個々の顧客に展開する必要があります... 私がやりたいことは、 1 回クリックするだけですべての顧客に展開するためのループ)。

4

1 に答える 1

3

50 以上のサイトで同じコード ベースを使用して、非常によく似たプロセスを実行しています。Azure REST Management APIを使用してデプロイを実行します。サイト固有の設定を web.config から個々の ServiceConfiguration..cscfg ファイルに移動し、使用CloudConfigurationManager.GetSetting("settingsKey")して構成値を取得することをお勧めします。設定にアクセスするために、おそらくドメインベースのキーの簡単なリストを作成します。

Management APIの使用に関する Azure チームの優れたコード サンプルは、こちら にあります。これをコード ベースに適用して、コンソール アプリを作成し、TFS ビルド プロセス中にそのコンソール アプリを呼び出しました。以下は、サブスクリプション内のホストされたサービスのリストを取得し、各ホストされたサービスの展開を更新するために使用する関連コードです。

            var packageUrl = UploadFileToBlob(package);
            var services = new ListHostedServicesCommand();
            services.Run();
            hostedServices = services.HostedServices;

            var date = DateTime.UtcNow.ToString("yyyyMMdd-hhmmss-");
            var label = date + "some-deployment-name";
            var fileinfo = new FileInfo(config);

            if (!string.IsNullOrEmpty(packageUrl) && fileinfo.Exists)
            {
                // get the url of the package uploaded to blob
                AzureCommand.PackageLocation = packageUrl;
                AzureCommand.ConfigFileLocation = fileinfo.FullName;
                AzureCommand.DeploymentSlot = "production";
                AzureCommand.Mode = "auto";
                AzureCommand.Label = label;

                foreach (var hostedService in hostedServices)
                {
                    Console.WriteLine("updating: " + hostedService.ServiceName);
                    // get the deployment unique name - required for upgrade
                    AzureCommand.HostedServiceName = hostedService.ServiceName;
                    AzureCommand.DeploymentName = null;
                    var getDeployment = new GetDeploymentCommand();
                    getDeployment.Run();
                    AzureCommand.DeploymentName = getDeployment.Deployment.Name;

                    // upgrade the existing deployment    
                    var upgradeDeployment = new UpgradeDeploymentCommand();
                    upgradeDeployment.Run();
                    servicesOperations.Add(upgradeDeployment.TrackingId, upgradeDeployment.ServiceManagement);
                }

                // check status of all operations submitted
                foreach (var servicesOperation in servicesOperations)
                {
                    // check status of operations
                    AzureCommand.WaitForAsyncOperation(servicesOperation.Value, servicesOperation.Key);
                }
            }
于 2013-03-11T04:50:17.877 に答える