파이프라인을 사용하여 Bicep 파일 배포

완료됨

이제 기본 파이프라인을 만들었으므로 Bicep 파일을 배포하도록 파이프라인을 설정할 준비가 되었습니다. 이 단원에서는 파이프라인에서 Bicep 코드를 배포하는 방법과 배포 단계를 설정하는 방법을 알아봅니다.

참고

이 단원의 명령은 개념을 설명하기 위해 표시된 것입니다. 명령을 아직 실행하지 마세요. 여기에서 학습하는 내용을 곧 연습할 예정입니다.

서비스 연결

사용자 컴퓨터에서 Bicep 파일을 배포하는 경우 Azure CLI 또는 Azure PowerShell을 사용합니다. 코드를 배포하기 전에 Azure에 로그인합니다. 일반적으로 도구는 브라우저에 이메일 주소와 암호를 입력하도록 요청합니다. 자격 증명이 확인되면 리소스 배포 권한이 확인됩니다. 그러면 도구를 사용하여 Bicep 파일을 배포할 수 있습니다.

파이프라인을 통한 배포에는 인증이 필요합니다. 파이프라인은 인적 개입 없이 실행되므로 서비스 주체를 사용하여 Azure에 인증해야 합니다. 서비스 주체의 자격 증명은 애플리케이션 ID와 비밀로 구성되며, 이는 일반적으로 키 또는 인증서입니다. Azure Pipelines에서 서비스 연결을 사용하여 이러한 자격 증명을 파이프라인에서 사용할 수 있도록 안전하게 저장합니다. 서비스 연결에는 파이프라인이 귀하가 배포하려는 Azure 환경을 식별하는 데 도움이 되는 몇 가지 기타 정보도 포함되어 있습니다.

이 모듈에서는 서비스 연결을 만들 때 Azure DevOps를 사용하여 자동으로 서비스 주체를 만듭니다. 서비스 주체를 사용하여 Azure 배포 파이프라인 인증 모듈은 작동 방식을 비롯하여 서비스 주체에 대한 자세한 설명은 물론 역할을 만들고 역할을 할당하고 관리하는 방법도 제공합니다.

서비스 연결을 만들 때 이름을 지정해야 합니다. 단계는 이 이름을 사용하여 서비스 연결을 참조하므로 파이프라인 YAML 코드에 비밀 정보를 포함할 필요가 없습니다.

파이프라인이 시작되면 배포 단계를 실행하는 에이전트는 서비스 연결과 그 자격 증명에 액세스할 수 있습니다. 파이프라인 단계는 사용자가 직접 로그인하는 것과 마찬가지로 자격 증명을 사용하여 Azure에 로그인합니다. 그런 다음 이 단계에 정의된 작업이 서비스 주체의 ID를 사용합니다.

Diagram that shows a pipeline that includes an Azure deployment step, which accesses a service connection and then deploys to Azure.

서비스 주체에 배포 단계를 실행하는 데 필요한 사용 권한이 있는지 확인해야 합니다. 예를 들어 서비스 주체에게 리소스를 배포하는 리소스 그룹의 참가자 역할을 할당해야 할 수 있습니다.

경고

서비스 주체의 자격 증명을 YAML 파일에 저장하고 az login 명령을 사용하여 로그인하는 방법이 더 쉬워 보일 수 있습니다. 이 방법을 사용하여 서비스 주체를 인증해서는 안됩니다. YAML 파일의 자격 증명은 삭제 텍스트로 저장됩니다. 리포지토리에 액세스할 수 있는 모든 사용자가 이 자격 증명을 보고 사용할 수 있습니다. Azure DevOps 조직 및 프로젝트에 대한 액세스를 제한하는 경우에도, 누군가가 리포지토리를 복제할 때마다 자격 증명이 포함된 YAML 파일이 해당 사용자의 컴퓨터에 위치하게 됩니다. 파이프라인에서 Azure를 사용할 때마다 서비스 연결을 사용하는 것이 중요합니다. 서비스 연결을 통해 다른 보안 및 액세스 제어 기능도 이용할 수 있습니다.

서비스 연결은 Azure DevOps 프로젝트에서 만들어집니다. 단일 서비스 연결은 여러 파이프라인에서 공유할 수 있습니다. 그러나 일반적으로 배포하는 각 파이프라인 및 각 환경에 대해 서비스 연결 및 해당 서비스 주체를 설정하는 것이 좋습니다. 이렇게 하면 파이프라인의 보안이 강화되고, 예상한 것과 다른 환경에 리소스를 실수로 배포하거나 구성할 가능성이 줄어듭니다.

또한 특정 파이프라인에서만 사용할 수 있도록 서비스 연결을 설정할 수 있습니다. 예를 들어 웹 사이트의 프로덕션 환경에 배포되는 서비스 연결을 만들 때는 웹 사이트의 파이프라인만 이 서비스 연결을 사용할 수 있도록 하는 것이 좋습니다. 서비스 연결을 특정 파이프라인으로 제한하면 다른 사람이 실수로 다른 프로젝트에 대해 동일한 서비스 연결을 사용하고 프로덕션 웹 사이트가 중단될 가능성을 막을 수 있습니다.

Azure 리소스 그룹 배포 작업을 사용하여 Bicep 파일 배포

파이프라인에서 Bicep 파일을 배포해야 하는 경우 Azure 리소스 그룹 배포 작업을 사용할 수 있습니다. 다음은 해당 작업을 사용하는 단계를 구성하는 방법의 예입니다.

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    connectedServiceName: 'MyServiceConnection'
    location: 'westus3'
    resourceGroupName: Example
    csmFile: deploy/main.bicep
    overrideParameters: >
        -parameterName parameterValue

첫 번째 줄은 AzureResourceManagerTemplateDeployment@3를 지정합니다. 이 줄은 이 단계에서 사용하려는 작업의 이름이 AzureResourceManagerTemplateDeployment이고 작업의 버전 3를 사용하려고 함을 Azure Pipelines에 알립니다.

Azure 리소스 그룹 배포 작업을 사용하는 경우 입력을 지정하여 수행할 명령을 작업에게 알려줍니다. 작업을 사용할 때 지정할 수 있는 몇 가지 입력은 다음과 같습니다.

  • connectedServiceName은 사용할 서비스 연결의 이름을 지정합니다.
  • location은 그 값을 사용하지 않을 수 있더라도 지정해야 합니다. 또한 Azure 리소스 그룹 배포 작업은 리소스 그룹을 만들 수 있으며, 이 경우 해당 작업은 리소스 그룹을 만들 Azure 지역을 알아야 합니다. 이 모듈에서는 location 입력 값을 지정하지만 해당 값은 사용되지 않습니다.
  • resourceGroupName은 Bicep 파일을 배포해야 하는 리소스 그룹의 이름을 지정합니다.
  • overrideParameters에는 배포 시 Bicep 파일에 전달하려는 매개 변수 값이 포함되어 있습니다.

작업은 시작되면 서비스 연결을 사용하여 Azure에 로그인합니다. 작업이 지정된 배포를 실행하면 작업이 인증된 것입니다. az login을(를) 실행할 필요가 없습니다.

Azure CLI 및 Azure PowerShell 명령 실행

Azure Pipelines에서 가장 유용한 기본 제공 작업 중 두 가지는 Azure CLI 및 Azure PowerShell 작업입니다. 이러한 작업을 사용하여 하나 이상의 Azure CLI 또는 PowerShell 명령을 실행할 수 있습니다.

향후 Microsoft Learn 모듈에서는 Azure CLI 명령을 사용하여 파이프라인에서 배포 프로세스의 더 많은 부분을 자동화하는 방법을 확인할 수 있습니다.

variables

파이프라인은 YAML 파일과 별도로 유지하려는 값을 포함하는 경우가 많습니다. 예를 들어 리소스 그룹에 Bicep 파일을 배포하는 경우 리소스 그룹의 이름을 지정합니다. 리소스 그룹 이름은 다른 환경에 배포할 때 다를 것입니다. 또한 데이터베이스 서버 암호와 같은 비밀을 포함하여 Bicep 파일에 매개 변수를 제공해야 할 수도 있습니다. 이를 파이프라인 YAML 파일이나 Git 리포지토리의 다른 위치에 저장하지 마세요. 대신, 보안을 강화하고 파이프라인 정의를 다시 사용할 수 있도록 변수를 사용합니다.

변수 만들기

Azure Pipelines 웹 인터페이스는 파이프라인 변수를 만드는 데 사용할 수 있는 편집기를 제공합니다.

Screenshot of Azure DevOps that shows creating a new variable.

Azure Pipelines 변수 값을 비밀로 설정할 수 있습니다. 변수 값을 비밀로 설정하는 경우 값을 설정한 후에는 볼 수 없습니다. Azure Pipelines는 파이프라인 로그에 비밀 값을 표시하지 않도록 설계되었습니다.

경고

기본적으로 Azure Pipelines는 파이프라인 로그에서 비밀 변수 값을 난독 처리하지만, 사용자도 모범 사례를 따라야 합니다. 파이프라인 단계는 비밀을 포함하여 모든 변수 값에 액세스할 수 있습니다. 비밀 변수를 안전하게 처리하지 않는 단계가 파이프라인에 포함된 경우 비밀 변수가 파이프라인 로그에 표시될 가능성이 있습니다.

다른 사용자가 파이프라인을 수동으로 실행하면서 변수 값을 재정의할 수도 있습니다. 특정 사용자가 제공하는 값은 해당 특정 파이프라인 실행에만 사용됩니다. 변수 재정의는 파이프라인을 테스트할 때 유용할 수 있습니다.

파이프라인에서 변수 사용

변수를 만든 후에는 파이프라인의 YAML 파일에서 변수를 참조하는 데 특정 구문을 사용합니다.

- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    connectedServiceName: $(ServiceConnectionName)
    location: $(DeploymentDefaultLocation)
    resourceGroupName: $(ResourceGroupName)
    csmFile: deploy/main.bicep
    overrideParameters: >
      -environmentType $(EnvironmentType)

파이프라인 정의 파일 형식에는 특수 $(VariableName) 구문이 포함되어 있습니다. 비밀인지 여부에 관계없이 이 방법을 사용하여 모든 변수를 참조할 수 있습니다.

앞의 예제에서 Bicep 파일의 이름은 변수에 저장되지 않습니다. Bicep 매개 변수와 마찬가지로, 모든 것에 대한 변수를 만들 필요가 없습니다. 환경 간에 변경될 수 있는 모든 것과 비밀인 모든 것을 변수로 만드는 것이 좋습니다. 파이프라인은 항상 동일한 템플릿 파일을 사용하므로 경로에 대한 변수를 만들 필요가 없습니다.

시스템 변수

또한 Azure Pipelines는 시스템 변수도 사용합니다. 시스템 변수에는 파이프라인에서 사용할 수 있는 미리 정의된 정보가 포함됩니다. 파이프라인에서 사용할 수 있는 시스템 변수는 다음과 같습니다.

  • Build.BuildNumber는 파이프라인 실행의 고유한 식별자입니다. 이름에도 불구하고 Build.BuildNumber 값은 숫자가 아니라 문자열인 경우가 많습니다. 이 변수를 사용하여 Azure 배포의 이름을 지정할 수 있으므로 배포를 트리거한 특정 파이프라인 실행으로 다시 추적할 수 있습니다.
  • Agent.BuildDirectory는 파이프라인 실행의 파일이 저장되는 에이전트 컴퓨터의 파일 시스템의 경로입니다. 이 정보는 빌드 에이전트에서 파일을 참조하려는 경우에 유용할 수 있습니다.

파이프라인의 YAML 파일 내에 변수 만들기

Azure Pipelines 웹 인터페이스를 사용하여 변수를 만들 수 있을 뿐 아니라 파이프라인의 YAML 파일에서 변수 값을 설정할 수 있습니다. 값이 비밀이 아니고, 리포지토리에 저장할 수 있으며, 파이프라인 정의 전체에서 참조할 수 있도록 파일의 한 위치에 보관하려는 경우 이 옵션을 사용할 수 있습니다. 이 방법을 사용하여 버전 제어 시스템에서 변수에 대한 변경 내용을 추적할 수 있습니다.

YAML 파일에서 변수를 설정하려면 variables 섹션을 추가합니다.

trigger: none

pool:
  vmImage: ubuntu-latest

variables:
  ServiceConnectionName: 'MyServiceConnection'
  EnvironmentType: 'Test'
  ResourceGroupName: 'MyResourceGroup'
  DeploymentDefaultLocation: 'westus3'

jobs:
- job:
  steps:
  - task: AzureResourceManagerTemplateDeployment@3
    inputs:
      connectedServiceName: $(ServiceConnectionName)
      location: $(DeploymentDefaultLocation)
      resourceGroupName: $(ResourceGroupName)
      csmFile: deploy/main.bicep
      overrideParameters: >
        -environmentType $(EnvironmentType)

이 파이프라인 예제는 네 개의 변수 ServiceConnectionName, EnvironmentType, ResourceGroupNameDeploymentDefaultLocation을 정의합니다.

이 모듈의 뒷부분에서는 여러 위치에 정의된 변수를 하나의 파이프라인에 함께 혼합하는 방법을 알아봅니다.