2

이전에 항상 있었다 별도의 클라우드 프로젝트 : 공통의 출력에 구축 할 때 여러에게 ServiceDefinition.csdef 파일 각 환경에 대한 단일 클라우드 프로젝트? 이 같은 각 환경에 대한

  • 을 유지

    • :

      Cloud Project layout

      몇 가지 문제가 포즈 경로, 어느 ServiceDefinition.csdef 복사됩니까?
    나는 여러 함께 ServiceConfiguration 각 환경에 대한 파일 및 여러 프로필 공개에 대해 하나의 클라우드 프로젝트를 사용하여 제안하고

    :

    Single Cloud Project

    가 장점 :

    • 적은 유지 보수 문제를 (1 프로젝트 및 1 ServiceDefinition.csdef)
    • ServiceDefinition.csdef은 출력 폴더

    지금이 문제는 모든 환경이이 ServiceDefinition.csdef에 정의 된대로 동일한 인스턴스 크기을 가질 필요가 있다는 것입니다.

    이 문제를 해결할 수있는 방법이 있습니까?

    +0

    배포를 위해 powershell을 사용하는 것을 고려하십시오 (cspack을 사용하여 패키지 빌드하기). 그런 다음 패키지를 빌드하기 전에 각 특정 환경에 대한 정의를 패치 할 수 있습니다. –

    +0

    빌드 서버가 현재 ServiceDefinition에서 패키지를 생성 중입니다. 여러 개의 패키지를 만드십니까? 각 환경마다 하나씩? 패키지를 만들기 전에 어떻게 정의를 패치합니까? – davenewza

    답변

    1

    예, 우리는 여러 패키지를 만듭니다 (환경마다 하나씩). 우리는 VMM 크기 (일례)와 같은 것을 패치하는 다른 powershell 스크립트를 가지고 있습니다 :

    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