빠른 시작: GitHub Actions를 사용하여 Bicep 파일 배포

GitHub Actions는 소프트웨어 개발 워크플로를 자동화하는 GitHub의 기능 모음입니다. 이 빠른 시작에서는 Azure Resource Manager 배포를 위한 GitHub Actions를 사용하여 Azure에 Bicep 파일 배포를 자동화합니다.

GitHub Actions 및 Bicep 파일에 대한 간략한 소개를 제공합니다. GitHub Actions 및 프로젝트 설정에 대한 자세한 단계는 Bicep 및 GitHub Actions를 사용하여 Azure 리소스 배포를 참조하세요.

필수 조건

리소스 그룹 만들기

리소스 그룹을 만듭니다. 이 빠른 시작의 뒷부분에서 Bicep 파일을 이 리소스 그룹에 배포합니다.

az group create -n exampleRG -l westus

배포 자격 증명 생성

GitHub Actions는 ID로 실행됩니다. az ad sp create-for-rbac 명령을 사용하여 ID에 대한 서비스 주체를 만듭니다. ID가 있는 GitHub 작업이 이 리소스 그룹에 리소스를 만들 수 있도록 이전 세션에서 만든 리소스 그룹에 대한 기여자 역할을 서비스 주체에게 부여합니다. 필요한 최소 액세스 권한을 부여하는 것이 좋습니다.

az ad sp create-for-rbac --name {app-name} --role contributor --scopes /subscriptions/{subscription-id}/resourceGroups/exampleRG --json-auth

{app-name} 자리 표시자를 애플리케이션 이름으로 바꿉니다. {subscription-id}는 구독 ID로 바꿉니다.

출력은 아래와 비슷한 App Service 앱에 대한 액세스를 제공하는 역할 할당 자격 증명이 있는 JSON 개체입니다.

  {
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    ...
  }

나중에 사용할 수 있도록 이 JSON 개체를 복사합니다. clientId, clientSecret, subscriptionIdtenantId 값이 있는 섹션만 필요합니다. 앞의 예제의 tenantId 줄과 같이 마지막 줄 끝에 추가 쉼표가 없는지 확인합니다. 그렇지 않으면 잘못된 JSON 파일이 발생합니다. 배포 중에 "Login failed with Error: Content is not a valid JSON object. Double check if the 'auth-type' is correct."라는 오류가 발생합니다.

GitHub 비밀 구성

Azure 자격 증명, 리소스 그룹 및 구독에 대한 비밀을 만듭니다. 워크플로 만들기 섹션에서 이러한 비밀을 사용합니다.

  1. GitHub에서 리포지토리로 이동합니다.

  2. 설정 > 비밀 및 변수 > 작업 > 새 리포지토리 비밀을 선택합니다.

  3. Azure CLI 명령의 전체 JSON 출력을 비밀의 값 필드에 붙여넣습니다. 비밀 AZURE_CREDENTIALS의 이름을 지정합니다.

  4. AZURE_RG라는 이름으로 다른 비밀을 만듭니다. 보안 비밀의 값 필드(exampleRG)에 리소스 그룹의 이름을 추가합니다.

  5. AZURE_SUBSCRIPTION라는 이름으로 다른 비밀을 만듭니다. 비밀의 값 필드에 구독 ID를 추가합니다(예: 90fd3f9d-4c61-432d-99ba-1273f236afa2).

Bicep 파일 추가

GitHub 리포지토리에 Bicep 파일을 추가합니다. 다음 Bicep 파일은 저장소 계정을 만듭니다.

@minLength(3)
@maxLength(11)
param storagePrefix string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
  'Standard_RAGRS'
  'Standard_ZRS'
  'Premium_LRS'
  'Premium_ZRS'
  'Standard_GZRS'
  'Standard_RAGZRS'
])
param storageSKU string = 'Standard_LRS'

param location string = resourceGroup().location

var uniqueStorageName = '${storagePrefix}${uniqueString(resourceGroup().id)}'

resource stg 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: uniqueStorageName
  location: location
  sku: {
    name: storageSKU
  }
  kind: 'StorageV2'
  properties: {
    supportsHttpsTrafficOnly: true
  }
}

output storageEndpoint object = stg.properties.primaryEndpoints

Bicep 파일에는 3~11자의 storagePrefix라는 매개 변수 하나가 필요합니다.

파일을 리포지토리의 어디에나 배치할 수 있습니다. 다음 섹션의 워크플로 샘플에서는 Bicep 파일의 이름이 main.bicep이고 리포지토리의 루트에 저장되어 있다고 가정합니다.

워크플로 만들기

워크플로는 트리거될 때 실행할 단계를 정의합니다. 리포지토리의 .github/workflows/ 경로에 있는 YAML(.yml) 파일입니다. 워크플로 파일 확장명은 .yml 또는 .yaml일 수 있습니다.

워크플로를 만들려면 다음 단계를 따르세요.

  1. GitHub 리포지토리의 상단 메뉴에서 작업을 선택합니다.

  2. 새 워크플로를 선택합니다.

  3. 워크플로 직접 설정을 선택합니다.

  4. main.yml이 아닌 다른 이름을 선호하는 경우 워크플로 파일의 이름을 바꿉니다. 예: deployBicepFile.yml

  5. yml 파일의 내용을 다음 코드로 바꿉니다.

    name: Deploy Bicep file
    on: [push]
    jobs:
      build-and-deploy:
        runs-on: ubuntu-latest
        steps:
    
        - name: Checkout code
          uses: actions/checkout@main
    
        - name: Log into Azure
          uses: azure/login@v1
          with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}
    
        - name: Deploy Bicep file
          uses: azure/arm-deploy@v1
          with:
            subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
            resourceGroupName: ${{ secrets.AZURE_RG }}
            template: ./main.bicep
            parameters: 'storagePrefix=mystore storageSKU=Standard_LRS'
            failOnStdErr: false
    

    mystore를 고유한 스토리지 계정 이름 접두사로 바꿉니다.

    참고 항목

    ARM 배포 작업에 대신 JSON 형식 매개 변수 파일을 지정할 수 있습니다(예: .azuredeploy.parameters.json).

    워크플로 파일의 첫 번째 섹션에는 다음이 포함됩니다.

    • name: 워크플로의 이름입니다.
    • on: 워크플로를 트리거하는 GitHub 이벤트의 이름입니다. 기본 분기에 푸시 이벤트가 있을 때 워크플로가 트리거됩니다.
  6. 변경 내용 커밋을 선택합니다.

  7. 기본 분기에 직접 커밋을 선택합니다.

  8. 새 파일 커밋(또는 변경 내용 커밋)을 선택합니다.

워크플로 파일이나 Bicep 파일을 업데이트하면 워크플로가 트리거됩니다. 워크플로는 변경 내용을 커밋한 직후에 시작됩니다.

워크플로 상태 확인

  1. 작업 탭을 선택합니다. deployBicepFile.yml 만들기 워크플로가 나열됩니다. 워크플로를 실행하는 데 1-2분이 소요됩니다.
  2. 워크플로를 선택하여 열고 StatusSuccess인지 확인합니다.

리소스 정리

리소스 그룹 및 리포지토리가 더 이상 필요하지 않은 경우 리소스 그룹과 GitHub 리포지토리를 삭제하여 배포한 리소스를 정리합니다.

az group delete --name exampleRG

다음 단계