Azure Container Apps를 사용하면 GitHub Actions를 사용하여 컨테이너 앱에 수정 버전을 게시할 수 있습니다. 커밋이 GitHub 리포지토리로 푸시되면 컨테이너 레지스트리에서 컨테이너 이미지를 업데이트하는 워크플로가 트리거됩니다. Azure Container Apps는 업데이트된 컨테이너 이미지에 따라 새 수정 버전을 만듭니다.
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 }}
중요합니다
별도의 단계에서 컨테이너 이미지를 빌드하는 경우 latest와 같은 안정적인 태그 대신 커밋 SHA와 같은 고유한 태그를 사용해야 합니다. 자세한 내용은 이미지 태그 모범 사례를 참조하세요.
Azure Container Registry를 사용하여 인증
Azure Container Apps 작업은 컨테이너 이미지를 푸시하기 위해 Azure Container Registry로 인증해야 합니다. 컨테이너 앱은 또한 컨테이너 이미지를 끌어오기 위해 Azure Container Registry로 인증해야 합니다.
이미지를 푸시하기 위해 작업은 acrName 작업에 제공된 자격 증명을 사용하여 azure/login에 지정된 컨테이너 레지스트리로 자동 인증합니다.
이미지를 끌어오기 위해 Azure Container Apps는 관리 ID(권장) 또는 관리자 자격 증명을 사용하여 Azure Container Registry를 통해 인증합니다. 관리 ID를 사용하려면 작업이 배포하는 컨테이너 앱이 관리 ID를 사용하도록 구성되어야 합니다. 레지스트리의 관리자 자격 증명으로 인증하려면 작업의 acrUsername 및 acrPassword 입력을 설정합니다.
비 ACR 레지스트리에서 이미지 배포
Azure Container Apps는 ACR(Azure Container Registry) 외에도 GHCR(GitHub Container Registry)과 같은 다른 레지스트리에서 호스트되는 컨테이너 이미지를 지원합니다. 이 섹션에서는 공용 및 프라이빗 이미지를 포함하여 GHCR에서 컨테이너 이미지를 배포하는 방법을 보여 줍니다.
비고
GHCR과 같은 비 ACR 레지스트리를 사용하는 경우 이미지가 공용인 경우에도 레지스트리를 사용하여 인증하도록 컨테이너 앱을 구성해야 합니다.
GHCR에서 공용 이미지 배포
컨테이너 이미지가 공용인 경우 인증 자격 증명을 지정하지 않고 배포할 수 있습니다. 다음 예제에서는 배포 작업을 사용하여 GHCR에서 공용 이미지를 배포하는 방법을 보여 줍니다.
이 명령을 실행하기 전에 실제 GitHub 사용자 이름으로 대체 <YOUR-GITHUB-USERNAME> 합니다.
- name: Deploy public GHCR image to Container App
uses: azure/container-apps-deploy-action@v1
with:
containerAppName: my-container-app
resourceGroup: my-container-app-rg
imageToDeploy: ghcr.io/<YOUR-GITHUB-USERNAME>/myimage:latest
registryServer: ghcr.io
배포하기 전에 GHCR에서 끌어오도록 컨테이너 앱을 구성합니다.
az containerapp registry set \
--name my-container-app \
--resource-group my-container-app-rg \
--server ghcr.io
GHCR에서 프라이빗 이미지 배포
이미지가 프라이빗인 경우 GitHub Actions 워크플로에서 인증 자격 증명을 제공해야 합니다. GitHub 개인용 액세스 토큰(PAT)을 read:packages 범위와 함께 사용합니다. 토큰 및 사용자 이름을 GitHub 리포지토리에 비밀로 저장합니다.
- name: Deploy private GHCR image to Container App
uses: azure/container-apps-deploy-action@v1
with:
containerAppName: my-container-app
resourceGroup: my-container-app-rg
imageToDeploy: ghcr.io/<YOUR-GITHUB-USERNAME>/myimage:${{ github.sha }}
registryServer: ghcr.io
registryUsername: ${{ secrets.GHCR_USERNAME }}
registryPassword: ${{ secrets.GHCR_TOKEN }}
GHCR 자격 증명을 사용하여 이미지를 끌어오도록 컨테이너 앱을 구성합니다.
az containerapp registry set \
--name my-container-app \
--resource-group my-container-app-rg \
--server ghcr.io \
--username <GHCR_USERNAME> \
--password <GHCR_TOKEN>
GitHub 사용자 이름 및 개인용 액세스 토큰으로 <GHCR_USERNAME>과 <GHCR_TOKEN>를 각각 대체하세요.
비고
최신과 같은 일반 태그 대신 Git 커밋 SHA(${{ github.sha }})와 같은 고유 태그를 사용합니다. 이렇게 하면 캐싱 문제를 방지하고 새 수정 버전을 안정적으로 만들 수 있습니다.
구성
다음 단계를 수행하여 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 리포지토리에 있어야 합니다.
Azure CLI를 사용하여 Azure에 로그인합니다.
az login다음으로 CLI용 최신 Azure Container Apps 확장을 설치합니다.
az extension add --name containerapp --upgrade자체 GitHub 리포지토리가 없으면 샘플에서 하나를 만듭니다.
- 다음 위치로 이동하여 새 리포지토리를 만듭니다.
- 리포지토리 이름을
my-container-app으로 지정합니다.
로컬 컴퓨터에 리포지토리를 복제합니다.
git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
관리 ID가 사용하도록 설정된 컨테이너 앱 만들기
다음 단계에서 az containerapp up 명령을 사용하여 컨테이너 앱을 만듭니다. 이 명령은 Azure 리소스를 만들고, 컨테이너 이미지를 빌드하고, 이미지를 레지스트리에 저장하고, 컨테이너 앱에 배포합니다.
앱을 만든 후 관리 ID를 앱에 추가하고 ID에 AcrPull 역할을 할당하여 ID가 레지스트리에서 이미지를 가져올 수 있도록 할 수 있습니다.
복제된 리포지토리의 src 폴더로 변경합니다.
cd my-container-app cd srcaz containerapp up명령을 사용하여 Azure 리소스를 만들고 컨테이너 앱을 배포합니다.az containerapp up \ --name my-container-app \ --source . \ --ingress external명령 출력에서 Azure Container Registry의 이름을 적어 둡니다.
컨테이너 레지스트리의 전체 리소스 ID를 가져옵니다.
az acr show --name <ACR_NAME> --query id --output tsv<ACR_NAME>을 레지스트리 이름으로 바꿉니다.관리 ID를 컨테이너 앱에 사용하도록 설정합니다.
az containerapp identity assign \ --name my-container-app \ --resource-group my-container-app-rg \ --system-assigned명령 출력에서 관리 ID의 보안 주체 ID를 적어 둡니다.
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로 바꿉니다.관리 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라는 비밀이 필요합니다. 비밀에는 컨테이너 앱 및 컨테이너 레지스트리를 포함하는 리소스 그룹에 대한 기여자 역할이 있는 서비스 주체의 자격 증명이 포함되어 있습니다.
컨테이너 앱 및 컨테이너 레지스트리를 포함하는 리소스 그룹에 대한 기여자 역할이 있는 서비스 주체를 만듭니다.
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매개 변수에 두 리소스 그룹을 모두 지정합니다.명령에서 JSON 출력을 복사합니다.
GitHub 리포지토리에서 설정>비밀>작업으로 이동하고 새 리포지토리 비밀을 선택합니다.
이름으로
AZURE_CREDENTIALS를 입력하고 JSON 출력의 콘텐츠를 값으로 붙여넣습니다.비밀 추가를 선택합니다.
GitHub Actions 워크플로 만들기
GitHub 리포지토리에서 작업으로 이동하고 새 워크플로를 선택합니다.
워크플로 직접 설정을 선택합니다.
다음 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,containerAppName및resourceGroup값이 리포지토리 및 Azure 리소스 값과 일치하는지 확인합니다.변경 내용을 기본 분기에 커밋합니다.
컨테이너 앱 빌드 및 배포를 위해 GitHub Actions 워크플로 실행이 시작되어야 합니다. 진행 상황을 확인하려면 작업으로 이동합니다.
앱의 새 수정 버전을 배포하려면 기본 분기에 새 커밋을 푸시합니다.