2013-03-10 125 views
3

下面是這種情況: - 太多的網站使用相同的源代碼和自己的數據庫(每個客戶都有自己的系統用自己的數據庫,但所有客戶採用相同的源代碼)Windows Azure的多個部署

  • 我只有一個TFS項目,因爲所有的客戶使用相同的代碼(不是身體,因爲我必須部署在每個網站每個客戶)

的問題是:我怎麼能部署到一個網站(從VS 2012 - Web部署),它會自動更新所有其他網站,正確更改web.config(當前,每個部署設置都有其配置來更改web.config連接字符串)。

爲了簡化,目前,我把所有的部署設置(customer1表 - Web部署,顧客2 - Web部署....) 它的工作原理,但我必須部署到每個單一客戶... 我想要什麼要做一個循環,只需點擊一次即可部署到所有客戶)。

+0

我們使用[八達通](https://octopusdeploy.com/)項目等任務。 – VMAtm 2014-08-11 08:37:30

+0

另請參閱此[問題](http://programmers.stackexchange.com/questions/122729/alternatives-to-octopus-for-deploying-net-applications#) – VMAtm 2014-08-11 08:43:36

回答

3

我們做了一個非常類似的過程,對於大約50多個網站使用相同的代碼庫。我們使用Azure REST Management API來完成部署。我建議將網站特定的設置從web.config移動到單獨的ServiceConfiguration..cscfg文件,然後使用CloudConfigurationManager.GetSetting("settingsKey")獲取配置值。創建一個簡單的密鑰列表,可能是基於域的訪問您的設置。

Azure團隊使用Management API here有一個很好的代碼示例。我們對此進行了調整,以便在我們的代碼庫中創建控制檯應用程序並在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); 
       } 
      } 
+0

我知道了我想要的方式..我鏈接了所有網站添加到TFS帳戶,並定義了我想要的構建定義......所以無論何時我檢查解決方案,它都會自動更新網站..我也可以安排構建......這真是太棒了! – 2013-03-15 00:39:03

+0

不錯的工作!你能分享任何構建定義的細節嗎? – viperguynaz 2013-03-15 01:27:42

+0

它很簡單,實際上...我將我的網站鏈接到同一個TFS帳戶,並且默認情況下它會檢入並更新每個登記網站。但是如果您要構建定義,則可以將每個網站設置爲擁有不同的定義就像設置每個星期一更新網站...有很多選項,在TFS上檢查它 - >構建 - >構建定義 – 2013-03-29 18:13:14