GitHub Actions를 사용하여 ARM 템플릿 배포

GitHub Actions는 코드를 저장하고 끌어오기 요청 및 이슈에 대해 공동 작업하는 곳과 동일한 위치에서 소프트웨어 개발 워크플로를 자동화하는 GitHub의 기능 모음입니다.

Azure Resource Manager 템플릿 배포 작업을 사용하여 Azure에 대한 ARM 템플릿(Azure Resource Manager 템플릿) 배포를 자동화할 수 있습니다.

필수 조건

워크플로 파일 개요

워크플로는 리포지토리의 경로에 /.github/workflows/ 있는 YAML(.yml) 파일에 의해 정의됩니다. 이 정의에는 워크플로를 구성하는 다양한 단계 및 매개 변수가 포함됩니다.

파일에는 두 개의 섹션이 있습니다.

섹션 작업
인증 1. 배포 자격 증명을 생성합니다.
Deploy 1. Resource Manager 템플릿을 배포합니다.

배포 자격 증명 생성

Azure CLI에서 az ad sp create-for-rbac 명령을 사용하여 서비스 주체를 만듭니다. 이 명령은 Azure Portal에서 Azure Cloud Shell을 사용하거나 사용해 보세요 단추를 선택하여 실행합니다.

az ad sp create-for-rbac --name "myML" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name> \
                            --json-auth

매개 변수 --json-auth 는 Azure CLI 버전 >= 2.51.0에서 사용할 수 있습니다. 사용 중단 경고와 함께 사용하기 --sdk-auth 이전 버전입니다.

위의 예시에서 자리 표시자를 구독 ID, 리소스 그룹 이름 및 앱 이름으로 바꿉니다. 출력은 아래와 비슷한 App Service 앱에 대한 액세스를 제공하는 역할 할당 자격 증명이 있는 JSON 개체입니다. 나중에 사용할 수 있도록 이 JSON 개체를 복사합니다.

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

GitHub 비밀 구성

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

  2. 탐색 메뉴에서 설정으로 이동합니다.

  3. 보안 > 비밀 및 변수 > 작업을 선택합니다.

    Screenshot of adding a secret

  4. 새 리포지토리 비밀을 선택합니다.

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

  6. 비밀 추가를 선택합니다.

Resource Manager 템플릿 추가

GitHub 리포지토리에 Resource Manager 템플릿을 추가합니다. 이 템플릿은 스토리지 계정을 만듭니다.

https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.storage/storage-account-create/azuredeploy.json

리포지토리의 아무 곳에나 파일을 배치할 수 있습니다. 다음 섹션의 워크플로 샘플에서는 템플릿 파일의 이름이 azuredeploy.json 리포지토리의 루트에 저장된다고 가정합니다.

워크플로 만들기

워크플로 파일은 리포지토리의 루트에 있는 .github/workflows 폴더에 저장해야 합니다. 워크플로 파일 확장명은 .yml 또는 .yaml수 있습니다.

  1. GitHub 리포지토리의 위쪽 메뉴에서 작업을 선택합니다.
  2. 새 워크플로를 선택합니다.
  3. 워크플로 직접 설정을 선택합니다.
  4. main.yml이 아닌 다른 이름을 선호하는 경우 워크플로 파일의 이름을 바꿉니다. 예: deployStorageAccount.yml.
  5. yml 파일의 내용을 다음으로 바꿉다.
  on: [push]
  name: Azure ARM
  jobs:
    build-and-deploy:
      runs-on: ubuntu-latest
      steps:

        # Checkout code
      - uses: actions/checkout@main

        # Log into Azure
      - uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}

        # Deploy ARM template
      - name: Run ARM deploy
        uses: azure/arm-deploy@v1
        with:
          subscriptionId: ${{ secrets.AZURE_SUBSCRIPTION }}
          resourceGroupName: ${{ secrets.AZURE_RG }}
          template: ./azuredeploy.json
          parameters: storageAccountType=Standard_LRS

        # output containerName variable from template
      - run: echo ${{ steps.deploy.outputs.containerName }}

참고 항목

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

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

  • name: 워크플로의 이름입니다.
  • on: 워크플로를 트리거하는 GitHub 이벤트의 이름입니다. 워크플로는 지정된 두 파일 중 하나 이상을 수정하는 기본 분기에 푸시 이벤트가 있을 때 트리거됩니다. 두 파일은 워크플로 파일과 템플릿 파일입니다.
  1. 커밋 시작을 선택합니다.
  2. 기본 분기에 직접 커밋을 선택합니다.
  3. 새 파일 커밋(또는 변경 내용 커밋)을 선택합니다.

워크플로 파일 또는 업데이트 중인 템플릿 파일에 의해 워크플로가 트리거되도록 구성되었으므로 변경 내용을 커밋한 직후에 워크플로가 시작됩니다.

워크플로 상태 확인

  1. 작업 탭을 선택합니다. deployStorageAccount.yml 만들기 워크플로가 나열됩니다. 워크플로를 실행하는 데 1-2분이 걸립니다.
  2. 워크플로를 선택하여 엽니다.
  3. 메뉴에서 ARM 배포 실행을 선택하여 배포를 확인합니다.

리소스 정리

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

다음 단계