다음을 통해 공유


GitHub Actions를 사용하여 Azure Container Apps에 배포

Azure Container Apps를 사용하면 GitHub Actions를 사용하여 컨테이너 앱에 수정 버전을 게시할 수 있습니다. 커밋이 GitHub 리포지토리로 푸시되면 컨테이너 레지스트리에서 컨테이너 이미지를 업데이트하는 워크플로가 트리거됩니다. Azure Container Apps는 업데이트된 컨테이너 이미지에 따라 새 수정 버전을 만듭니다.

GitHub 리포지토리를 변경하면 새 수정 버전을 만드는 작업이 트리거됩니다.

GitHub Actions 워크플로는 리포지토리의 특정 분기에 대한 커밋에 의해 트리거됩니다. 워크플로를 만들 때 워크플로를 트리거하는 분기를 결정합니다.

이 문서에서는 완전히 사용자 지정 가능한 워크플로를 만드는 방법을 보여 줍니다. Azure CLI로 시작 GitHub Actions 워크플로를 생성하려면 Azure CLI로 GitHub Actions 워크플로 생성을 참조하세요.

Azure Container Apps GitHub 작업

컨테이너 앱을 빌드하고 배포하려면 GitHub Actions 워크플로에 azure/container-apps-deploy-action 작업을 추가합니다.

작업은 다음 시나리오를 지원합니다.

  • Dockerfile에서 빌드하고 Container Apps에 배포
  • Dockerfile 없이 소스 코드에서 빌드하고 Container Apps에 배포합니다. 지원되는 언어에는 .NET, Java, Node.js, PHP 및 Python이 포함됩니다.
  • 기존 컨테이너 이미지를 Container Apps에 배포합니다.

사용 예

작업을 사용하는 몇 가지 일반적인 시나리오는 다음과 같습니다. 자세한 내용은 작업의 GitHub Marketplace 페이지를 참조하세요.

Container Apps 빌드 및 배포

다음 코드 조각에서는 소스 코드에서 컨테이너 이미지를 빌드하고 Container Apps에 배포하는 방법을 보여 줍니다.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      appSourcePath: ${{ github.workspace }}/src
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg

작업은 appSourcePath의 Dockerfile을 사용하여 컨테이너 이미지를 빌드합니다. Dockerfile이 없으면 작업은 appSourcePath의 소스 코드에서 컨테이너 이미지 빌드를 시도합니다.

기존 컨테이너 이미지를 Container Apps에 배포합니다.

다음 코드 조각에서는 기존 컨테이너 이미지를 Container Apps에 배포하는 방법을 보여 줍니다.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg
      imageToDeploy: myregistry.azurecr.io/app:${{ github.sha }}

Important

별도의 단계에서 컨테이너 이미지를 빌드하는 경우 latest와 같은 안정적인 태그 대신 커밋 SHA와 같은 고유한 태그를 사용해야 합니다. 자세한 내용은 이미지 태그 모범 사례를 참조하세요.

Azure Container Registry를 사용하여 인증

Azure Container Apps 작업은 컨테이너 이미지를 푸시하기 위해 Azure Container Registry로 인증해야 합니다. 컨테이너 앱은 또한 컨테이너 이미지를 끌어오기 위해 Azure Container Registry로 인증해야 합니다.

이미지를 푸시하기 위해 작업은 azure/login 작업에 제공된 자격 증명을 사용하여 acrName에 지정된 컨테이너 레지스트리로 자동 인증합니다.

이미지를 끌어오기 위해 Azure Container Apps는 관리 ID(권장) 또는 관리자 자격 증명을 사용하여 Azure Container Registry를 통해 인증합니다. 관리 ID를 사용하려면 작업이 배포하는 컨테이너 앱이 관리 ID를 사용하도록 구성되어야 합니다. 레지스트리의 관리자 자격 증명으로 인증하려면 작업의 acrUsernameacrPassword 입력을 설정합니다.

구성

다음 단계를 수행하여 Azure Container Apps에 배포할 GitHub Actions 워크플로를 구성합니다.

  • 앱용 GitHub 리포지토리 만들기
  • 관리 ID가 사용하도록 설정된 컨테이너 앱 만들기
  • Azure Container Registry에 대한 AcrPull 역할을 컨테이너 앱의 관리 ID에 할당
  • GitHub 리포지토리에서 비밀 구성
  • GitHub Actions 워크플로 만들기

필수 조건

요구 사항 지침
Azure 계정 계정이 없으면 무료 계정을 만듭니다. 계속 진행하려면 Azure 구독에 대한 기여자 또는 소유자 권한이 필요합니다. 자세한 내용은 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.
GitHub 계정 무료로 가입하세요.
Azure CLI Azure CLI를 설치합니다.

GitHub 리포지토리 만들기 및 소스 코드 복제

워크플로를 만들기 전에 앱의 소스 코드가 GitHub 리포지토리에 있어야 합니다.

  1. Azure CLI를 사용하여 Azure에 로그인합니다.

    az login
    
  2. 다음으로 CLI용 최신 Azure Container Apps 확장을 설치합니다.

    az extension add --name containerapp --upgrade
    
  3. 자체 GitHub 리포지토리가 없으면 샘플에서 하나를 만듭니다.

    1. 다음 위치로 이동하여 새 리포지토리를 만듭니다.
    2. 리포지토리 이름을 my-container-app으로 지정합니다.
  4. 로컬 컴퓨터에 리포지토리를 복제합니다.

    git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
    

관리 ID가 사용하도록 설정된 컨테이너 앱 만들기

다음 단계에서 az containerapp up 명령을 사용하여 컨테이너 앱을 만듭니다. 이 명령은 Azure 리소스를 만들고, 컨테이너 이미지를 빌드하고, 이미지를 레지스트리에 저장하고, 컨테이너 앱에 배포합니다.

앱을 만든 후 관리 ID를 앱에 추가하고 ID에 AcrPull 역할을 할당하여 ID가 레지스트리에서 이미지를 가져올 수 있도록 할 수 있습니다.

  1. 복제된 리포지토리의 src 폴더로 변경합니다.

    cd my-container-app
    cd src
    
  2. az containerapp up 명령을 사용하여 Azure 리소스를 만들고 컨테이너 앱을 배포합니다.

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    
  3. 명령 출력에서 Azure Container Registry의 이름을 적어 둡니다.

  4. 컨테이너 레지스트리의 전체 리소스 ID를 가져옵니다.

    az acr show --name <ACR_NAME> --query id --output tsv
    

    <ACR_NAME>을 레지스트리 이름으로 바꿉니다.

  5. 관리 ID를 컨테이너 앱에 사용하도록 설정합니다.

    az containerapp identity assign \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --system-assigned
    

    명령 출력에서 관리 ID의 보안 주체 ID를 적어 둡니다.

  6. Azure Container Registry에 대한 AcrPull 역할을 컨테이너 앱의 관리 ID에 할당합니다.

    az role assignment create \
      --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \
      --role AcrPull \
      --scope <ACR_RESOURCE_ID>
    

    <MANAGED_IDENTITY_PRINCIPAL_ID>를 관리 ID의 보안 주체 ID로 바꾸고, <ACR_RESOURCE_ID>를 Azure Container Registry의 리소스 ID로 바꿉니다.

  7. 관리 ID를 사용하여 Azure Container Registry에서 이미지를 끌어오도록 컨테이너 앱을 구성합니다.

    az containerapp registry set \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --server <ACR_NAME>.azurecr.io \
      --identity system
    

    <ACR_NAME>을 Azure Container Registry의 이름으로 바꿉니다.

GitHub 리포지토리에서 비밀 구성

GitHub 워크플로는 Azure에 인증하기 위해 AZURE_CREDENTIALS라는 비밀이 필요합니다. 비밀에는 컨테이너 앱 및 컨테이너 레지스트리를 포함하는 리소스 그룹에 대한 기여자 역할이 있는 서비스 주체의 자격 증명이 포함되어 있습니다.

  1. 컨테이너 앱 및 컨테이너 레지스트리를 포함하는 리소스 그룹에 대한 기여자 역할이 있는 서비스 주체를 만듭니다.

    az ad sp create-for-rbac \
      --name my-app-credentials \
      --role contributor \
      --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \
      --json-auth \
      --output json
    

    <SUBSCRIPTION_ID>를 Azure 구독의 ID로 바꿉니다. 컨테이너 레지스트리가 다른 리소스 그룹에 있는 경우 --scopes 매개 변수에 두 리소스 그룹을 모두 지정합니다.

  2. 명령에서 JSON 출력을 복사합니다.

  3. GitHub 리포지토리에서 설정>비밀>작업으로 이동하고 새 리포지토리 비밀을 선택합니다.

  4. 이름으로 AZURE_CREDENTIALS를 입력하고 JSON 출력의 콘텐츠를 값으로 붙여넣습니다.

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

GitHub Actions 워크플로 만들기

  1. GitHub 리포지토리에서 작업으로 이동하고 새 워크플로를 선택합니다.

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

  3. 다음 YAML을 편집기에 붙여넣습니다.

    name: Azure Container Apps Deploy
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v3
    
          - name: Log in to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Build and deploy Container App
            uses: azure/container-apps-deploy-action@v1
            with:
              appSourcePath: ${{ github.workspace }}/src
              acrName: <ACR_NAME>
              containerAppName: my-container-app
              resourceGroup: my-container-app-rg
    

    <ACR_NAME>을 Azure Container Registry의 이름으로 바꿉니다. branches 아래의 분기 이름과 appSourcePath, containerAppNameresourceGroup 값이 리포지토리 및 Azure 리소스 값과 일치하는지 확인합니다.

  4. 변경 내용을 기본 분기에 커밋합니다.

컨테이너 앱 빌드 및 배포를 위해 GitHub Actions 워크플로 실행이 시작되어야 합니다. 진행 상황을 확인하려면 작업으로 이동합니다.

앱의 새 수정 버전을 배포하려면 기본 분기에 새 커밋을 푸시합니다.