Share via


Azure Pipelines에서 Azure Container Apps에 배포

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

파이프라인은 리포지토리의 특정 분기에 대한 커밋에서 트리거됩니다. 파이프라인을 만들 때 트리거인 분기를 결정합니다.

Container Apps Azure Pipelines 작업

이 작업에서 지원하는 시나리오는 다음과 같습니다.

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

프로덕션 릴리스에서는 이 작업이 Azure DevOps와 함께 제공되며 더 이상 명시적인 설치가 필요하지 않습니다. 전체 설명서를 보려면 AzureContainerApps@1 - Azure Container Apps Deploy v1 작업을 참조하세요.

사용 예

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

Container Apps 빌드 및 배포

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

steps:
- task: AzureContainerApps@1
  inputs:
    appSourcePath: '$(Build.SourcesDirectory)/src'
    azureSubscription: 'my-subscription-service-connection'
    acrName: 'myregistry'
    containerAppName: 'my-container-app'
    resourceGroup: 'my-container-app-rg'

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

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

다음 코드 조각에서는 기존 컨테이너 이미지를 Container Apps에 배포하는 방법을 보여 줍니다. 작업은 서비스 연결을 사용하여 레지스트리를 인증합니다. 서비스 연결 ID에 레지스트리에 대한 AcrPush 역할이 할당되지 않은 경우 acrUsernameacrPassword 입력 매개 변수를 사용하여 레지스트리의 관리자 자격 증명을 제공합니다.

steps:
  - task: AzureContainerApps@1
    inputs:
      azureSubscription: 'my-subscription-service-connection'
      containerAppName: 'my-container-app'
      resourceGroup: 'my-container-app-rg'
      imageToDeploy: 'myregistry.azurecr.io/my-container-app:$(Build.BuildId)'

Important

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

Azure Container Registry를 사용하여 인증

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

이미지를 푸시하기 위해 작업에서 azureSubscription에 제공된 서비스 연결을 사용하여 acrName에 지정된 컨테이너 레지스트리를 사용하여 자동으로 인증합니다. 서비스 연결 ID에 레지스트리에 대한 AcrPush 역할이 할당되지 않은 경우 acrUsernameacrPassword를 사용하여 레지스트리의 관리자 자격 증명을 제공합니다.

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

구성

다음 단계를 수행하여 Azure Container Apps에 배포할 Azure DevOps 파이프라인을 구성합니다.

  • 앱에 대한 Azure DevOps 리포지토리 만들기
  • 관리 ID가 사용하도록 설정된 컨테이너 앱 만들기
  • Azure Container Registry에 대한 AcrPull 역할을 컨테이너 앱의 관리 ID에 할당
  • Azure DevOps Marketplace에서 Azure Container Apps 작업 설치
  • Azure 구독에 대한 Azure DevOps 서비스 연결 구성
  • Azure DevOps 파이프라인 만들기

필수 조건

요구 사항 지침
Azure 계정 계정이 없으면 무료 계정을 만듭니다. 계속 진행하려면 Azure 구독에 대한 기여자 또는 소유자 권한이 필요합니다. 자세한 내용은 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.
Azure DevOps 프로젝트 Azure DevOps로 이동하여 평가판 시작을 선택합니다. 그런 다음, 새 프로젝트를 만듭니다.
Azure CLI Azure CLI를 설치합니다.

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

파이프라인을 만들기 전에 앱에 대한 소스 코드가 리포지토리에 있어야 합니다.

  1. Azure DevOps에 로그인하고, 프로젝트로 이동합니다.

  2. 리포지토리 페이지를 엽니다.

  3. 위쪽 탐색 모음에서 리포지토리 드롭다운을 선택하고, 리포지토리 가져오기를 선택합니다.

  4. 다음 정보를 입력하고, 가져오기를 선택합니다.

    필드
    리포지토리 유형 Git
    복제 URL https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
    이름 my-container-app
  5. 복제를 선택하여 리포지토리 URL을 보고 복사합니다.

  6. 터미널을 열고, 다음 명령을 실행하여 리포지토리를 복제합니다.

    git clone <REPOSITORY_URL> my-container-app
    

    <REPOSITORY_URL>을 복사한 URL로 바꿉니다.

컨테이너 앱 만들기 및 관리 ID 구성

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

앱이 만들어지면 관리 ID를 앱에 추가하고, AcrPull 역할을 ID에 할당하여 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 \
      --output tsv
    

    명령 출력에서 관리 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의 이름으로 바꿉니다.

Azure DevOps 서비스 연결 만들기

Azure Container Apps에 배포하려면 Azure 구독에 대한 Azure DevOps 서비스 연결을 만들어야 합니다.

  1. Azure DevOps에서 프로젝트 설정을 선택합니다.

  2. 서비스 연결을 선택합니다.

  3. 새 서비스 연결을 선택합니다.

  4. Azure Resource Manager를 선택합니다.

  5. 서비스 주체(자동)를 선택하고, 다음을 선택합니다.

  6. 다음 정보를 입력하고 저장을 선택합니다.

    필드
    구독 Azure 구독을 선택합니다.
    리소스 그룹 컨테이너 앱 및 컨테이너 레지스트리가 포함된 리소스 그룹(my-container-app-rg)을 선택합니다.
    서비스 연결 이름 my-subscription-service-connection

서비스 연결에 대한 자세한 내용은 Microsoft Azure에 연결을 참조하세요.

Azure DevOps YAML 파이프라인 만들기

  1. Azure DevOps 프로젝트에서 파이프라인을 선택합니다.

  2. 새 파이프라인을 선택합니다.

  3. Azure Repos Git를 선택합니다.

  4. 소스 코드(my-container-app)가 포함된 리포지토리를 선택합니다.

  5. 시작 파이프라인을 선택합니다.

  6. 편집기에서 파일의 내용을 다음 YAML로 바꿉니다.

    trigger:
      branches:
        include:
          - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
      - task: AzureContainerApps@1
        inputs:
          appSourcePath: '$(Build.SourcesDirectory)/src'
          azureSubscription: '<AZURE_SUBSCRIPTION_SERVICE_CONNECTION>'
          acrName: '<ACR_NAME>'
          containerAppName: 'my-container-app'
          resourceGroup: 'my-container-app-rg'
    

    <AZURE_SUBSCRIPTION_SERVICE_CONNECTION>을 이전 단계에서 만든 Azure DevOps 서비스 연결의 이름(my-subscription-service-connection)으로 바꾸고, <ACR_NAME>을 Azure Container Registry의 이름으로 바꿉니다.

  7. 저장 및 실행을 선택합니다.

Azure Pipelines 실행에서 컨테이너 앱 빌드 및 배포를 시작합니다. 진행 상황을 확인하려면 파이프라인으로 이동하여 실행을 선택합니다. 첫 번째 파이프라인을 실행하는 동안 서비스 연결을 사용할 수 있는 권한을 파이프라인에 부여하라는 메시지가 표시될 수 있습니다.

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