【问题标题】:A single cloud project for each environment?每个环境都有一个云项目?
【发布时间】:2014-06-11 07:09:27
【问题描述】:

以前我一直为每个环境都有单独的云项目,像这样:

这带来了一些问题:

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

我建议使用单个云项目,每个环境包含多个 ServiceConfiguration 文件,并使用多个配置文件进行发布:

优点:

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

我现在遇到的问题是所有环境都需要具有相同的实例大小,正如ServiceDefinition.csdef 中定义的那样。

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

【问题讨论】:

  • 考虑使用 powershell 进行部署(使用 cspack 构建包)。然后,您可以在构建包之前修补每个特定环境的定义。
  • 我们的构建服务器当前正在从 ServiceDefinition 创建一个包。您是否创建多个包?每个环境一个?在创建包之前如何修补定义?

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


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    相关资源
    最近更新 更多