워크플로를 사용하여 Bicep 파일 배포

완료됨

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

참고

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

코드 체크 아웃

Bicep 파일은 Git 리포지토리에 저장됩니다. GitHub Actions에서 Git 리포지토리의 파일을 체크 아웃하도록 워크플로에 명시적으로 지시해야 합니다. 그렇지 않으면 워크플로에서 파일에 액세스할 수 없습니다. 이 단계는 일반적으로 작업에서 가장 먼저 수행하는 일입니다.

코드를 체크 아웃하려면 actions/checkout@v3 동작을 사용하면 됩니다.

name: MyWorkflow

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
      with:
        path: repo

워크플로에는 uses 키워드가 포함됩니다. 이 키워드(keyword) 이름이 미리 actions/checkout정의된 작업을 사용하려고 했음을 나타냅니다.

Bicep 리소스와 마찬가지로 작업은 항상 버전 관리 대상입니다. 이 경우 워크플로는 버전 3을 사용하므로 동작 이름에 @v3이 추가됩니다.

워크플로에 이 동작이 포함되면 리포지토리의 코드가 실행기의 파일 시스템에 체크 아웃됩니다. path 매개 변수를 사용하여 파일을 저장해야 하는 경로를 지정합니다.

Azure에 대한 인증

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

이 모듈에서는 사용할 워크플로에 대한 워크로드 ID를 만듭니다. 워크로드 ID를 사용하여 Azure 배포 워크플로 인증 모듈은 작동 방식을 비롯하여 워크로드 ID에 대한 자세한 설명은 물론 역할을 만들고 할당하고 관리하는 방법도 제공합니다.

워크플로를 통한 배포에는 인증도 필요합니다. 워크플로는 인적 개입 없이 실행되므로 워크로드 ID를 사용하여 Azure에 인증해야 합니다. GitHub와 Microsoft Entra ID는 함께 작동하여 자격 증명 없이도 워크플로를 안전하게 인증합니다.

워크플로가 Azure와 통신해야 하는 경우 워크플로 단계는 워크로드 ID를 사용하여 Azure에 로그인합니다. 그런 다음 이 워크플로에서 정의된 단계에서 워크플로의 ID를 사용합니다.

Diagram that shows a workflow that includes an Azure deployment step, which accesses a secret and then deploys to Azure.

워크로드 ID에 배포 단계를 실행하는 데 필요한 사용 권한이 있는지 확인해야 합니다. 예를 들어 워크로드 ID에 리소스를 배포하는 리소스 그룹의 기여자 역할을 할당해야 할 수 있습니다.

Warning

YAML 파일에 사용자 자격 증명을 저장한 다음 명령을 사용하여 az login 로그인하는 것이 더 쉬울 수 있습니다. 이 방법을 사용하여 워크로드 ID를 인증해서는 안 됩니다. YAML 파일의 자격 증명은 삭제 텍스트로 저장됩니다. 리포지토리에 액세스할 수 있는 모든 사용자가 이 자격 증명을 보고 사용할 수 있습니다. GitHub 리포지토리에 대한 액세스를 제한하는 경우에도, 누군가가 리포지토리를 복제할 때마다 자격 증명이 포함된 YAML 파일이 해당 사용자의 컴퓨터에 위치하게 됩니다.

Azure에 로그인

워크플로가 Azure 환경에 대해 명령을 실행하려면 먼저 로그인해야 합니다. 로그인 프로세스를 처리하는 azure/login이라는 동작이 있습니다. 또한 인증 토큰을 사용하려면 워크플로에 대한 권한을 부여해야 합니다.

name: MyWorkflow

on: [workflow_dispatch]

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
      with:
        path: repo
    - uses: azure/login@v1
      with:
        client-id: ${{ secrets.AZURE_CLIENT_ID }}
        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

azure/login 작업을 수행하려면 워크로드 ID를 사용하기 위해 Microsoft Entra 애플리케이션 ID, Microsoft Entra 테넌트(디렉터리) ID, 작업하려는 Azure 구독 ID 등 세 가지 정보를 제공해야 합니다.

이 동작이 실행되면 실행기가 인증되고 Azure 환경에 대해 문을 실행할 수 있습니다.

Bicep 파일 배포

워크플로가 Azure에 로그인한 후 워크로드 ID를 사용하여 Bicep 배포를 실행할 수 있습니다. GitHub Actions에서 azure/arm-deploy 동작을 사용하여 Bicep 배포를 시작합니다.

참고

다른 방법으로도 GitHub Actions에서 Bicep 파일을 배포할 수 있습니다. 예를 들어 azure/CLI 동작을 사용한 다음 Azure CLI 명령을 제공하여 배포를 실행할 수 있습니다. 그러나 작업은 배포용으로 특별히 설계되었기 때문에 azure/arm-deploy 이 모듈에서 사용합니다.

다음은 azure/arm-deploy 동작을 사용하는 단계를 구성하는 방법의 예입니다.

name: MyWorkflow

on: [workflow_dispatch]

permissions:
  id-token: write
  contents: read

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
      with:
        path: repo
    - uses: azure/login@v1
      with:
        client-id: ${{ secrets.AZURE_CLIENT_ID }}
        tenant-id: ${{ secrets.AZURE_TENANT_ID }}
        subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    - uses: azure/arm-deploy@v1
      with:
        resourceGroupName: ${{ env.AZURE_RESOURCEGROUP_NAME }}
        template: ./deploy/main.bicep
        parameters: environmentType=Test

azure/arm-deploy 동작은 다음을 비롯한 여러 매개 변수를 허용합니다.

  • resourceGroupName: Bicep 파일에 정의된 리소스를 배포하려는 리소스 그룹의 이름입니다.
  • template: 리포지토리의 Bicep 파일 경로입니다. 이 경로는 리포지토리의 루트를 기준으로 합니다.
  • parameters: 배포 시 제공하는 매개 변수 값을 나타냅니다. 이 예제에서는 environmentType 매개 변수에 대한 값을 제공합니다.

이전 azure/login 동작이 이미 워크플로를 Azure에 로그인했으므로 azure/arm-deploy 단계는 인증된 실행기에서 실행됩니다.

변수

워크플로 파일에 여러 곳에서 다시 사용하려는 값이 포함되는 경우가 많습니다. 쉽게 참조하고 값을 쉽게 변경할 수 있도록 이러한 값을 워크플로 파일의 맨 위에 저장할 수도 있습니다. 워크플로에서 정의한 변수는 환경 변수로 표면화됩니다. 재사용 가능한 값을 정의하려면 변수를 사용합니다.

변수 만들기

워크플로 파일의 다양한 수준에서 변수를 만들 수 있습니다. 그러나 전체 워크플로 파일에 사용할 수 있도록 하려면 on 문 바로 아래의 파일 맨 위에서 정의합니다. 변수를 정의하려면 env 매개 변수를 사용합니다.

env:
    AZURE_RESOURCEGROUP_NAME: gh-actions
    AZURE_WEBAPP_NAME: webapp-gh-actions

앞의 예제에서는 두 개의 환경 변수를 지정합니다.

워크플로에서 변수 사용

변수를 만든 후에는 다음과 같이 특수 구문을 사용하여 워크플로의 YAML 파일 내에서 해당 변수를 참조합니다.

${{ env.AZURE_RESOURCEGROUP_NAME }}

기본 환경 변수

GitHub Actions는 기본 환경 변수도 사용합니다. 기본 환경 변수에는 워크플로에서 사용할 수 있는 미리 정의된 정보가 포함됩니다. 워크플로에서 사용할 수 있는 몇 가지 기본 환경 변수는 다음과 같습니다.

  • github.sha: 워크플로의 실행을 트리거하는 Git 커밋의 식별자입니다.
  • github.run_number: 리포지토리에 있는 특정 워크플로의 실행마다 고유한 숫자입니다. 이 숫자는 워크플로의 첫 번째 실행에 대해 1부터 시작하고 새 실행마다 증가합니다. 이 변수를 사용하여 Azure 배포의 이름을 지정할 수 있으므로 배포를 트리거한 특정 워크플로 실행으로 다시 추적할 수 있습니다.

    참고

    GitHub Actions에서 워크플로 실행을 다시 실행할 수 있습니다. 이렇게 하면 실행 번호가 변경되지 않으므로 변수를 github.run_number 사용하여 워크플로가 실행된 횟수를 계산해서는 안 됩니다.

비밀

경우에 따라 데이터베이스 암호 또는 API 키와 같이 워크플로에서 사용할 비밀 정보를 저장해야 합니다. GitHub 비밀을 사용하여 자격 증명 또는 중요한 정보가 포함된 정보를 안전하게 저장합니다. 워크플로는 비밀의 값에 액세스할 수 있습니다.

비밀은 GitHub 리포지토리 설정에서 만들어집니다. 비밀은 리포지토리의 모든 워크플로에서 사용할 수 있습니다. 이후 모듈에서는 환경에 대해 알아보며, 이 환경에서는 특정 환경에 대한 배포에서의 비밀 사용을 제한할 수 있습니다.

경고

기본적으로 GitHub Actions는 워크플로 로그에서 비밀 변수 값을 난독 처리하지만, 사용자도 모범 사례를 따라야 합니다. 워크플로 단계에서 비밀 값에 액세스할 수 있습니다. 워크플로에 비밀을 안전하게 처리하지 않는 단계가 포함된 경우 워크플로 로그에 비밀 값이 표시될 가능성이 있습니다. 항상 워크플로 정의 파일의 변경 내용을 신중하게 검토하여 비밀이 잘못 처리되지 않는지 확인해야 합니다.

GitHub 웹 인터페이스를 사용하여 비밀을 만들 수 있습니다. 워크플로의 비밀 값을 참조하려면 다음 구문을 사용합니다.

${{ secrets.NAME_OF_THE_SECRET }}

워크플로가 시작되면 배포 단계를 실행하는 실행기에서 암호 해독된 GitHub 비밀 값에 액세스할 수 있습니다. GitHub Actions는 워크플로 로그에 비밀 값을 표시하지 않도록 설계되었습니다.

Bicep 매개 변수와 마찬가지로, 모든 것에 대한 변수를 만들 필요가 없습니다. 환경 간에 변경될 수 있는 모든 것과 비밀인 모든 것의 GitHub 비밀을 변수로 만드는 것이 좋습니다. 워크플로는 항상 동일한 Bicep 파일을 사용하므로 경로에 대한 변수를 만들 필요가 없습니다.

이 모듈에서는 GitHub 비밀을 사용하여 태스크가 Azure에 로그인하는 데 필요한 정보 azure/login (Microsoft Entra 구독 및 테넌트 ID 및 워크로드 ID의 애플리케이션 등록 ID)를 저장합니다.