2013-03-10 110 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