배포 미리 보기 및 승인

완료됨

파이프라인 스테이지에 대한 내용과 파이프라인 스테이지를 추가하여 Bicep 코드의 유효성을 검사하는 방법을 알아보았습니다. 배포에 대한 신뢰도를 높이는 다음 단계에서는 배포를 통해 무엇이 변경되는지 정확하게 확인하는 또 다른 스테이지를 추가합니다.

이 단원에서는 파이프라인에서 what-if 명령을 사용하는 방법을 알아봅니다. 배포를 실행하기 전에 명령의 출력을 수동으로 확인할 수 있도록 승인을 추가하는 방법에 대해서도 알아봅니다.

가상 작업

Bicep 파일은 배포가 완료되었을 때 원하는 Azure 상태를 설명합니다. 배포를 제출하면 Azure Resource Manager는 Bicep 파일에 설명된 상태와 일치하도록 Azure 환경을 변경합니다.

배포를 통해 새 리소스가 환경에 배포되거나 기존 리소스가 업데이트될 수 있습니다. 배포를 전체 모드로 실행하면 기존 리소스가 삭제될 수도 있습니다.

리소스가 생성, 업데이트, 될 때마다 예상하지 않은 방식으로 변경될 위험이 있습니다. 정확하게 무엇이 생성, 업데이트, 삭제되는지 확인하는 단계를 추가하는 것이 좋습니다. 이 확인은 자동화 프로세스의 가치를 높입니다. 프로덕션 환경에 배포하는 경우에는 환경에 적용되는 변경 내용이 있는지 확인하는 것이 중요합니다.

Resource Manager는 파이프라인 스테이지 내에서 Bicep 파일에서 실행할 수 있는 가상 작업을 제공합니다.

Diagram of a pipeline that includes Lint, Validate, and Preview stages. The Preview stage executes a what-if operation against Azure.

다음과 같이 파이프라인 정의 내에서 az deployment group what-if Azure CLI 명령을 사용하여 가상 단계를 실행할 수 있습니다.

stages:

- stage: Preview
  jobs: 
  - job: Preview
    steps:
    - task: AzureCLI@2
      inputs:
        azureSubscription: 'MyServiceConnection'
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          az deployment group what-if \
            --resource-group $(ResourceGroupName) \
            --template-file deploy/main.bicep

이 모듈에서는 Azure CLI를 사용하여 가상 작업을 실행합니다. 사용자 고유의 PowerShell 기반 파이프라인을 빌드하는 경우 New-AzResourceGroupDeployment cmdlet을 -Whatif 스위치와 함께 사용하거나 Get-AzResourceGroupDeploymentWhatIfResult cmdlet을 사용할 수 있습니다.

가상 작업은 환경을 변경하지는 않고 대신, 생성되거나 삭제되는 리소스, 업데이트될 리소스 속성과 삭제될 리소스에 대해 설명합니다.

what-if 작업은 변경이 실제로 발생하지 않았는데 리소스가 변경될 것으로 보여 주는 경우가 있습니다. 이 피드백을 노이즈라고 합니다. 관련 문제를 줄이기 위해 노력하고 있지만 이러한 문제를 보고하려면 여러분의 도움이 필요합니다.

what-if 작업의 출력이 표시되면 배포를 계속할지 여부를 결정할 수 있습니다. 이 단계에는 일반적으로 사람이 what-if 명령의 출력을 검토한 다음, 확인된 변경 내용이 적절한지 결정하는 과정이 포함됩니다. 사람 검토자는 변경 내용이 합리적이라고 판단되면 파이프라인 실행을 수동으로 승인할 수 있습니다.

가상 명령에 대한 자세한 내용은 Microsoft Learn 모듈 가상을 사용하여 Azure 배포 변경 내용 미리 보기를 참조하세요.

환경

Azure Pipelines에서 환경은 솔루션이 배포되는 위치를 나타냅니다. 환경은 복잡한 배포를 작업할 때 도움이 되는 기능을 제공합니다. 환경 및 환경에서 제공하는 기능에 대한 자세한 내용은 뒤에 나오는 모듈에서 알아보겠습니다. 지금은 파이프라인에 수동 승인을 추가하는 기능에 집중하겠습니다.

이미 알고 계신 것처럼, 작업을 사용하여 파이프라인 스테이지 내부의 단계 순서를 정의합니다. 파이프라인에 환경을 포함하는 경우 배포 작업이라는 특수한 종류의 작업을 사용해야 합니다. 배포 작업은 일반 작업과 비슷하지만 몇 가지 추가 기능을 제공합니다. 이 기능에는 배포 작업에서 사용하는 환경의 정의가 포함됩니다.

variables:
  - name: deploymentDefaultLocation
    value: westus3

stages:

- stage: Preview
  jobs:
  - job: Preview
    steps:
    - task: AzureCLI@2
      inputs:
        azureSubscription: 'MyServiceConnection'
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          az deployment group what-if \
            --resource-group $(ResourceGroupName) \
            --template-file deploy/main.bicep

- stage: Deploy
  jobs:
    - deployment: Deploy
      environment: MyAzureEnvironment
      strategy:
        runOnce:
          deploy:
            steps:
            - checkout: self

            - task: AzureResourceManagerTemplateDeployment@3
              name: Deploy
              displayName: Deploy to Azure
              inputs:
                connectedServiceName: 'MyServiceConnection'
                location: $(deploymentDefaultLocation)
                resourceGroupName: $(ResourceGroupName)
                csmFile: deploy/main.bicep

배포 작업에 대한 YAML 정의가 일반 작업과 가장 다른 점은 다음과 같습니다.

  • 배포 작업이 job이라는 단어로 시작하지 않고 deployment로 정의됩니다.
  • environment 키워드는 대상으로 지정할 환경의 이름을 지정합니다. 위의 예제에서 배포는 MyAzureEnvironment라는 환경과 비교하여 추적됩니다.
  • strategy 키워드는 Azure Pipelines가 배포 단계를 실행하는 방법을 지정합니다. 배포 전략은 특히 여러 프로덕션 환경이 있는 경우에 복잡한 배포 프로세스를 지원합니다. 이 모듈에서는 runOnce 배포 전략을 사용합니다. 이 전략은 이미 익숙한 다른 작업과 비슷하게 작동합니다.

스테이지 검사 및 승인

환경을 만든 후에는 검사를 정의할 수 있습니다. 검사는 파이프라인에서 환경을 사용하려면 반드시 충족해야 하는 조건을 확인하는 데 사용됩니다. 승인은 사람이 수동 승인을 제공해야 하는 종류의 검사입니다.

검사는 파이프라인이 아닌 환경에서 정의됩니다. 파이프라인 YAML 파일의 작성자는 검사 및 승인을 제거하거나 추가할 수 없습니다. 환경의 관리자만이 환경의 검사 및 승인을 관리할 수 있습니다.

많은 조직에서 Azure Pipelines 환경의 소유자는 배포 대상이 되는 환경을 담당하는 사람입니다. 검사 및 승인은 올바른 사람이 배포 프로세스에 참여하도록 하는 데 도움이 됩니다.

검사 및 승인은 어떻게 작동하나요?

검사 및 승인은 파이프라인 스테이지가 시작되기 직전에 평가됩니다. Azure Pipelines는 파이프라인 스테이지를 실행하기 직전에 환경을 포함하여 스테이지에서 사용하는 모든 파이프라인 리소스를 살펴봅니다. 충족해야 하는 검사가 환경에 있을 수 있습니다.

승인은 검사의 일종입니다. 승인 검사를 구성할 때 파이프라인을 계속하도록 승인해야 하는 사용자를 한 명 이상 할당합니다.

Azure Pipelines는 다른 유형의 검사도 제공합니다. 예를 들어 API를 호출하여 일부 사용자 지정 논리를 실행하고, 스테이지를 실행할 수 있는 업무 시간을 제어하고, 배포가 성공하도록 Azure Monitor에 쿼리할 수 있습니다. 이 모듈에서는 승인 검사에 대해서만 설명하지만, 요약 단원에서 검사에 대해 자세히 설명하는 링크를 제공합니다.

참고

에이전트 풀 및 서비스 연결에서 검사가 구성될 수도 있습니다. 또한 수동 승인 작업이라는 특수 단계를 사용할 수 있습니다. 그러나 이 모듈에서는 환경 및 환경과 관련된 검사에 집중합니다.

파이프라인이 시작되고 승인 검사가 필요한 스테이지에 도달하면 파이프라인 실행이 일시 중지됩니다. 승인자로 지정된 모든 사용자에게 Azure DevOps 및 이메일로 메시지가 전달됩니다.

승인자는 what-if 작업에서 검색하는 변경 내용과 같은 파이프라인 로그를 검사할 수 있습니다. 승인자는 이 정보에 따라 변경 내용을 승인하거나 거부합니다. 이들이 변경을 승인하면 파이프라인이 다시 시작됩니다. 이들이 변경을 거부하거나 구성 가능한 시간 제한 기간 내에 응답하지 않으면 스테이지가 실패합니다.

Diagram of a pipeline that includes Lint, Validate, Preview, and Deploy stages, with an approval check before the Deploy stage.

모범 사례의 중요성

Azure Pipelines의 환경 기능은 배포를 환경에 연결하는 기능을 제공합니다. 연결된 배포는 환경 소유자가 정의한 검사 및 승인을 상속합니다. 그러나 새 파이프라인에서 반드시 환경을 사용해야 하는 것은 아닙니다.

사용자와 조직이 파이프라인 정의를 검토하는 모범 사례를 수립하는 것이 중요합니다. 예를 들어 분기 보호 정책을 사용하여 필수적으로 ‘주’ 분기의 변경 내용에 대한 끌어오기 요청을 검토하도록 리포지토리를 구성합니다. 이 개념은 후속 모듈에서 좀 더 알아보겠습니다.

배포에서 서비스 주체의 자격 증명을 사용하기 전에 승인을 얻을 수 있도록 서비스 연결에 검사 및 승인을 추가할 수도 있습니다. 그러나 승인은 서비스 연결이 필요하기 때문에 실행 전 유효성 검사 및 가상 작업 실행 기능에도 영향을 줍니다.

자체 서비스 주체가 있는 가상 스테이지에 별도의 다른 서비스 연결을 사용하면 됩니다. 실행 전 및 유효성 검사 스테이지에 사용되는 서비스 주체는 작업을 수행하는 데 필요한 최소 권한을 갖도록 사용자 지정 Azure 역할을 정의해야 합니다.