每个环境都有一个云项目?

时间:2014-06-11 07:09:28

标签: azure visual-studio-2013 azure-web-roles azure-configuration

以前我总是为每个环境都有单独的云项目,例如:

Cloud Project layout

这会带来一些问题:

  • 维护多个ServiceDefinition.csdef个文件
  • 构建到公共输出路径时,ServiceDefinition.csdef被复制了吗?

我建议为每个环境使用一个包含多个ServiceConfiguration文件的云项目,以及用于发布的多个配置文件:

Single Cloud Project

优点:

  • 减少维护问题(1个项目和1个ServiceDefinition.csdef
  • 将单个ServiceDefinition.csdef复制到输出文件夹

我现在遇到的问题是所有环境都需要相同的实例大小,因为这是在ServiceDefinition.csdef中定义的。

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

是的,我们创建了多个包(每个环境一个)。我们有不同的powershell脚本来修补像vm-size这样的东西(一个例子):

param(
    [parameter(Mandatory=$true)]
    [string]$fileToPatch,

    [parameter(Mandatory=$true)]
    [string]$roleName,

    [parameter(Mandatory=$true)]
    [validateSet("ExtraSmall", "Small", "Medium", "Large", "ExtraLarge", "A5", "A6", "A7")]
    [string]$vmsize = 'Small'
)
#  MAIN

$xml = New-Object System.Xml.XmlDocument
$xml.Load($fileToPatch)

$namespaceMgr = New-Object System.Xml.XmlNamespaceManager $xml.NameTable
$namespace = $xml.DocumentElement.NamespaceURI
$namespaceMgr.AddNamespace("ns", $namespace)

$xpathWorkerRoles = "/ns:ServiceDefinition/ns:WorkerRole"
$xpathWebRoles = "/ns:ServiceDefinition/ns:WebRole"
$Roles = $xml.SelectNodes($xpathWebRoles, $namespaceMgr) + $xml.SelectNodes($xpathWorkerRoles, $namespaceMgr)

$Roles | Where-Object { $_.name -eq $RoleName} | % { $_.vmsize = $vmsize; Write-Host 'Patched vmsize to' $vmsize 'for' $_.name } 

$xml.Save($fileToPatch)