다음을 통해 공유


AZURE Pipelines와 ARM 템플릿 통합

CI/CD(지속적인 통합 및 지속적인 배포)를 위해 ARM 템플릿(Azure Resource Manager 템플릿)을 Azure Pipelines와 통합할 수 있습니다. 이 문서에서는 Azure Pipelines를 사용하여 템플릿을 배포하는 두 가지 고급 방법을 알아봅니다.

옵션 선택

이 문서를 진행하기 전에 파이프라인에서 ARM 템플릿을 배포하기 위한 다양한 옵션을 살펴보겠습니다.

  • ARM 템플릿 배포 작업을 사용합니다. 이 옵션은 가장 쉬운 옵션입니다. 이 방법은 리포지토리에서 직접 템플릿을 배포하려는 경우에 작동합니다. 이 옵션은 이 문서에서 다루지 않지만 AZURE Pipelines와 ARM 템플릿의 연속 통합 자습서에서 설명합니다. ARM 템플릿 배포 작업을 사용하여 GitHub 리포지토리에서 템플릿을 배포하는 방법을 보여 줍니다.

  • Azure PowerShell 스크립트를 실행하는 작업을 추가합니다. 이 옵션은 로컬 테스트를 실행할 때 사용한 것과 동일한 스크립트를 사용할 수 있으므로 개발 수명 주기 동안 일관성을 제공하는 이점이 있습니다. 스크립트는 템플릿을 배포하지만 매개 변수로 사용할 값 가져오기와 같은 다른 작업을 수행할 수도 있습니다. 이 옵션은 이 문서에 나와 있습니다. Azure PowerShell 작업을 참조하세요.

    Visual Studio는 PowerShell 스크립트를 포함하는 Azure 리소스 그룹 프로젝트를 제공합니다. 스크립트는 프로젝트에서 Resource Manager가 액세스할 수 있는 스토리지 계정으로 아티팩트를 단계별로 실행합니다. 아티팩트(Artifacts)는 연결된 템플릿, 스크립트 및 애플리케이션 이진 파일과 같은 프로젝트의 항목입니다. 프로젝트에서 스크립트를 계속 사용하려면 이 문서에 표시된 PowerShell 스크립트 작업을 사용합니다.

  • 복사 및 배포 작업을 위한 작업을 추가합니다. 이 옵션은 프로젝트 스크립트에 대한 편리한 대안을 제공합니다. 파이프라인에서 두 작업을 구성합니다. 한 작업에서는 아티팩트를 액세스 가능한 위치로 단계별로 지정합니다. 다른 작업은 해당 위치에서 템플릿을 배포합니다. 이 옵션은 이 문서에 나와 있습니다. 작업 복사 및 배포를 참조하세요.

프로젝트 준비

이 문서에서는 ARM 템플릿과 Azure DevOps 조직이 파이프라인을 만들 준비가 되었다고 가정합니다. 다음 단계에서는 준비가 되었는지 확인하는 방법을 보여줍니다.

  • Azure DevOps 조직이 있습니다. 계정이 없는 경우 체험 계정을 만듭니다. 팀에 이미 Azure DevOps 조직이 있는 경우 사용하려는 Azure DevOps 프로젝트의 관리자인지 확인합니다.

  • Azure 구독에 대한 서비스 연결을 구성했습니다. 파이프라인의 작업은 서비스 주체의 ID로 실행됩니다. 연결을 만드는 단계는 DevOps 프로젝트 만들기를 참조하세요.

  • 프로젝트의 인프라를 정의하는 ARM 템플릿 이 있습니다.

파이프라인 만들기

  1. 이전에 파이프라인을 추가하지 않은 경우 새 파이프라인을 만들어야 합니다. Azure DevOps 조직에서 파이프라인 및 새 파이프라인 선택합니다.

    새 파이프라인 추가 단추의 스크린샷

  2. 코드가 저장되는 위치를 지정합니다. 다음 이미지는 Azure Repos Git을 선택하는 방법을 보여줍니다.

    Azure DevOps에서 코드 원본을 선택하는 스크린샷

  3. 해당 원본에서 프로젝트에 대한 코드가 있는 리포지토리를 선택합니다.

    Azure DevOps에서 프로젝트에 대한 리포지토리를 선택하는 스크린샷

  4. 만들 파이프라인 유형을 선택합니다. 스타터 파이프라인을 선택할 수 있습니다.

    Azure DevOps에서 만들 파이프라인 유형을 선택하는 스크린샷

Azure PowerShell 작업 또는 복사 파일을 추가하고 작업을 배포할 준비가 완료되었습니다.

Azure PowerShell 작업

이 섹션에서는 프로젝트에서 PowerShell 스크립트를 실행하는 단일 작업을 사용하여 연속 배포를 구성하는 방법을 보여 줍니다. 템플릿을 배포하는 PowerShell 스크립트가 필요한 경우 Deploy-AzTemplate.ps1 또는 Deploy-AzureResourceGroup.ps1참조하세요.

다음 YAML 파일은 Azure PowerShell 작업을 만듭니다.

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzurePowerShell@5
  inputs:
    azureSubscription: 'script-connection'
    ScriptType: 'FilePath'
    ScriptPath: './Deploy-AzTemplate.ps1'
    ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json
    azurePowerShellVersion: 'LatestVersion'

작업을 AzurePowerShell@5설정하면 파이프라인은 Az 모듈을 사용합니다. 스크립트에서 AzureRM 모듈을 사용하는 경우 작업을 AzurePowerShell@3.로 설정합니다.

steps:
- task: AzurePowerShell@3

의 경우 azureSubscription만든 서비스 연결의 이름을 제공합니다.

inputs:
    azureSubscription: '<your-connection-name>'

scriptPath의 경우 파이프라인 파일에서 스크립트로의 상대 경로를 제공하십시오. 리포지토리에서 경로를 볼 수 있습니다.

ScriptPath: '<your-relative-path>/<script-file-name>.ps1'

에서 ScriptArguments스크립트에 필요한 매개 변수를 제공합니다. 다음 예제에서는 스크립트에 대한 몇 가지 매개 변수를 보여 주지만 스크립트에 대한 매개 변수를 사용자 지정해야 합니다.

ScriptArguments: -Location 'centralus' -ResourceGroupName 'demogroup' -TemplateFile templates\mainTemplate.json

저장을 선택하면 빌드 파이프라인이 자동으로 실행됩니다. 빌드 파이프라인에 대한 요약으로 돌아가 상태를 확인합니다.

Azure DevOps의 파이프라인 결과 보기 스크린샷

현재 실행 중인 파이프라인을 선택하여 작업에 대한 세부 정보를 볼 수 있습니다. 완료되면 각 단계에 대한 결과가 표시됩니다.

작업 복사 및 배포

이 섹션에서는 두 가지 작업을 사용하여 연속 배포를 구성하는 방법을 보여 줍니다. 첫 번째 작업은 아티팩트를 스토리지 계정으로 단계화하고 두 번째 작업은 템플릿을 배포합니다.

스토리지 계정에 파일을 복사하려면 서비스 연결에 대한 서비스 주체에 Storage Blob 데이터 기여자 또는 Storage Blob 데이터 소유자 역할이 할당되어야 합니다. 자세한 내용은 AzCopy 시작을 참조하세요.

다음 YAML은 Azure 파일 복사 작업을 보여줍니다.

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'templates'
    azureSubscription: 'copy-connection'
    Destination: 'AzureBlob'
    storage: 'demostorage'
    ContainerName: 'projecttemplates'
  name: AzureFileCopy

이 작업에는 사용자 환경에 맞게 수정해야 하는 몇 가지 부분이 있습니다. 파이프라인 SourcePath 파일을 기준으로 아티팩트 위치를 나타냅니다.

SourcePath: '<path-to-artifacts>'

의 경우 azureSubscription만든 서비스 연결의 이름을 제공합니다.

azureSubscription: '<your-connection-name>'

스토리지 및 컨테이너 이름의 경우 아티팩트 저장에 사용할 스토리지 계정 및 컨테이너의 이름을 제공합니다. 스토리지 계정이 있어야 합니다.

storage: '<your-storage-account-name>'
ContainerName: '<container-name>'

파일 복사 작업을 만든 후에는 스테이징된 템플릿을 배포하는 작업을 추가할 준비가 된 것입니다.

다음 YAML은 Azure Resource Manager 템플릿 배포 작업을 보여줍니다.

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'copy-connection'
    subscriptionId: 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'West US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
    deploymentMode: 'Incremental'
    deploymentName: 'deploy1'

이 작업의 몇 가지 부분을 자세히 검토할 수 있습니다.

  • deploymentScope: 옵션Management GroupSubscriptionResource Group에서 배포 범위를 선택합니다. 범위에 대한 자세한 내용은 배포 범위를 참조하세요.

  • azureResourceManagerConnection: 만든 서비스 연결의 이름을 제공합니다.

  • subscriptionId: 대상 구독 ID를 제공합니다. 이 속성은 리소스 그룹 배포 범위 및 구독 배포 범위에만 적용됩니다.

  • resourceGroupNamelocation: 배포하려는 리소스 그룹의 이름과 위치를 제공합니다. 작업이 리소스 그룹이 존재하지 않으면 생성합니다.

    resourceGroupName: '<resource-group-name>'
    location: '<location>'
    
  • csmFileLink: 준비된 템플릿에 대한 링크를 제공합니다. 값을 설정할 때 파일 복사 작업에서 반환된 변수를 사용합니다. 다음 예제에서는 mainTemplate.json템플릿에 연결합니다. 파일 복사 태스크가 파일을 복사한 위치이기 때문에 템플릿이라는 폴더가 포함됩니다. 파이프라인에서 템플릿의 경로와 템플릿의 이름을 제공합니다.

    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    

파이프라인은 다음과 같습니다.

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'templates'
    azureSubscription: 'copy-connection'
    Destination: 'AzureBlob'
    storage: 'demostorage'
    ContainerName: 'projecttemplates'
  name: AzureFileCopy
- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'copy-connection'
    subscriptionId: 'aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'demogroup'
    location: 'West US'
    templateLocation: 'URL of the file'
    csmFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.json$(AzureFileCopy.StorageContainerSasToken)'
    csmParametersFileLink: '$(AzureFileCopy.StorageContainerUri)templates/mainTemplate.parameters.json$(AzureFileCopy.StorageContainerSasToken)'
    deploymentMode: 'Incremental'
    deploymentName: 'deploy1'

저장을 선택하면 빌드 파이프라인이 자동으로 실행됩니다. 작업 프레임 아래에서 작업을 선택하여 작업 상태를 확인합니다.

다음 단계