2

以前我一直有獨立的雲計算項目的每個環境,就像這樣:每個環境的單個雲計劃?

Cloud Project layout

這帶來了一些問題:

  • 維護多個ServiceDefinition.csdef文件
  • 當建立一個共同的輸出路徑,其中ServiceDefinition.csdef被複制?

我使用一個單一的雲計算項目與多個ServiceConfiguration文件爲每個環境,多個配置文件用於發佈提出:

Single Cloud Project

優點:

  • 更少的維護問題(1項目和1 ServiceDefinition.csdef
  • 單個ServiceDefinition.csdef被複制到輸出文件夾

我現在的問題是,所有的環境需要有,因爲這是在ServiceDefinition.csdef定義的相同的實例大小

有什麼辦法可以解決這個問題嗎?

+0

考慮使用powershell進行部署(使用cspack構建包)。然後,您可以在構建包之前修補每個特定環境的定義。 –

+0

我們的構建服務器當前正在從ServiceDefinition創建一個包。你創建了多個包嗎?每個環境一個?如何在創建包之前修補定義? – davenewza

回答

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) 
+0

很好的答案 - 謝謝。 – davenewza