다음을 통해 공유


자습서: Azure Container Apps 작업을 사용하여 자체 호스팅 CI/CD 실행기 및 에이전트 배포

GitHub Actions 및 Azure Pipelines를 사용하면 자체 호스팅 실행기 및 에이전트를 사용하여 CI/CD 워크플로를 실행할 수 있습니다. 이벤트 기반 Azure Container Apps 작업을 사용하여 자체 호스팅 실행기와 에이전트를 실행할 수 있습니다.

자체 호스팅 실행기는 클라우드 호스팅 실행기에서 사용할 수 없는 로컬 리소스 또는 도구에 액세스해야 하는 워크플로를 실행해야 하는 경우에 유용합니다. 예를 들어 Container Apps 작업의 자체 호스팅 실행기를 사용하면 워크플로에서 클라우드 호스팅 실행기가 액세스할 수 없는 작업의 가상 네트워크 내부 리소스에 액세스할 수 있습니다.

자체 호스팅 실행기를 이벤트 기반 작업으로 실행하면 Azure Container Apps의 서버리스 특성을 활용할 수 있습니다. 워크플로가 트리거되면 작업이 자동으로 실행되고, 작업이 완료되면 종료됩니다.

작업이 실행되는 시간에 대해서만 비용을 지불합니다.

이 자습서에서는 GitHub Actions 실행기를 이벤트 기반 Container Apps 작업으로 실행하는 방법을 알아봅니다.

  • 자체 호스팅 실행기를 배포하기 위한 Container Apps 환경 만들기
  • 자체 호스팅 실행기를 사용하는 워크플로를 실행하기 위한 GitHub 리포지토리 만들기
  • GitHub Actions 실행기를 실행하는 컨테이너 이미지 빌드
  • 실행기를 작업으로 Container Apps 환경에 배포
  • 자체 호스팅 실행기를 사용하는 워크플로를 만들고 실행되는지 확인

Important

자체 호스팅 실행기는 프라이빗 리포지토리에만 권장됩니다. 퍼블릭 리포지토리에서 사용하면 자체 호스팅 실행기에서 위험한 코드가 실행될 수 있습니다. 자세한 내용은 자체 호스팅 실행기 보안을 참조하세요.

이 자습서에서는 Azure Pipelines 에이전트를 이벤트 기반 Container Apps 작업으로 실행하는 방법을 알아봅니다.

  • 자체 호스팅 에이전트를 배포하기 위한 Container Apps 환경 만들기
  • Azure DevOps 조직 및 프로젝트 만들기
  • Azure Pipelines 에이전트를 실행하는 컨테이너 이미지 빌드
  • 수동 작업을 사용하여 Container Apps 환경에서 자리 표시자 에이전트 만들기
  • 에이전트를 작업으로 Container Apps 환경에 배포
  • 자체 호스팅 에이전트를 사용하는 파이프라인을 만들고 실행되는지 확인

Important

자체 호스팅 에이전트는 프라이빗 프로젝트에만 권장됩니다. 퍼블릭 프로젝트에서 사용하면 자체 호스팅 에이전트에서 위험한 코드가 실행될 수 있습니다. 자세한 내용은 자체 호스팅 에이전트 보안을 참조하세요.

참고 항목

컨테이너 앱 및 작업은 컨테이너에서 Docker 실행을 지원하지 않습니다. Docker 명령을 사용하는 워크플로의 모든 단계는 Container Apps 작업의 자체 호스팅 실행기 또는 에이전트에서 실행되면 실패합니다.

필수 조건

제한 사항 목록은 작업 제한 사항을 참조하세요.

설정

CLI에서 Azure에 로그인하려면 다음 명령을 실행하고 프롬프트에 따라 인증 프로세스를 완료합니다.

az login

최신 버전의 CLI를 실행하고 있는지 확인하려면 업그레이드 명령을 실행합니다.

az upgrade

그런 다음 CLI용 Azure Container Apps 확장을 설치하거나 업데이트합니다.

Azure CLI에서 az containerapp 명령을 실행하거나 Azure PowerShell의 Az.App 모듈에서 cmdlet을 실행할 때 누락된 매개 변수에 대한 오류가 발생하는 경우 최신 버전의 Azure Container Apps 확장이 설치되어 있어야 합니다.

az extension add --name containerapp --upgrade

참고 항목

2024년 5월부터 Azure CLI 확장 기능은 기본적으로 미리 보기 기능을 사용하도록 설정하지 않습니다. Container Apps 미리 보기 기능에 액세스하려면 --allow-preview true를 사용하여 Container Apps 확장을 설치합니다.

az extension add --name containerapp --upgrade --allow-preview true

이제 현재 확장 또는 모듈이 설치되었으므로 Microsoft.AppMicrosoft.OperationalInsights 네임스페이스를 등록합니다.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

환경 변수 만들기

이제 Azure CLI 설정이 완료되었으므로 이 문서 전체에서 사용되는 환경 변수를 정의할 수 있습니다.

RESOURCE_GROUP="jobs-sample"
LOCATION="northcentralus"
ENVIRONMENT="env-jobs-sample"
JOB_NAME="github-actions-runner-job"
RESOURCE_GROUP="jobs-sample"
LOCATION="northcentralus"
ENVIRONMENT="env-jobs-sample"
JOB_NAME="azure-pipelines-agent-job"
PLACEHOLDER_JOB_NAME="placeholder-agent-job"

컨테이너 앱 환경 만들기

Azure Container Apps 환경은 컨테이너 앱과 작업 주위의 보안 경계 역할을 하므로 동일한 네트워크를 공유하고 서로 통신할 수 있습니다.

참고 항목

기존 가상 네트워크와 통합된 Container Apps 환경을 만들려면 Azure Container Apps 환경에 가상 네트워크 제공을 참조 하세요.

  1. 다음 명령을 사용하여 리소스 그룹을 만듭니다.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. 다음 명령을 사용하여 Container Apps 환경을 만듭니다.

    az containerapp env create \
        --name "$ENVIRONMENT" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION"
    

워크플로를 실행하기 위한 GitHub 리포지토리 만들기

워크플로를 실행하려면 워크플로 정의가 포함된 GitHub 리포지토리를 만들어야 합니다.

  1. GitHub로 이동하여 로그인합니다.

  2. 다음 값을 입력하여 새 리포지토리를 만듭니다.

    설정
    담당자 GitHub 사용자 이름을 선택합니다.
    저장소 이름 리포지토리 이름을 입력합니다.
    표시 유형 프라이빗을 선택합니다.
    다음을 사용하여 이 리포지토리 초기화 Add a README file(README 파일 추가)을 선택합니다.

    나머지 값은 기본 선택으로 그대로 둡니다.

  3. 리포지토리 만들기를 선택합니다.

  4. 새 리포지토리에서 작업을 선택합니다.

  5. 간단한 워크플로 템플릿을 검색하고 구성을 선택합니다.

  6. 변경 내용 커밋을 선택하여 워크플로를 리포지토리에 추가합니다.

워크플로가 ubuntu-latest GitHub 호스팅 실행기에서 실행되고 메시지를 콘솔에 출력합니다. 나중에 GitHub 호스팅 실행기를 자체 호스팅 실행기로 바꿉니다.

GitHub 개인용 액세스 토큰 가져오기

자체 호스팅 실행기를 실행하려면 GitHub에서 PAT(개인용 액세스 토큰)를 만들어야 합니다. 실행기가 시작될 때마다 PAT는 실행기를 GitHub에 등록하기 위한 토큰을 생성하는 데 사용됩니다. PAT는 GitHub Actions 실행기 크기 조정 규칙에서도 사용되어 리포지토리의 워크플로 큐를 모니터링하고 필요에 따라 실행기를 시작합니다.

참고 항목

PAT(개인용 액세스 토큰)의 만료 날짜가 있습니다. 토큰이 유효하게 유지(만료되지 않음)되도록 정기적으로 토큰을 회전하여 중단 없는 서비스를 유지합니다.

  1. GitHub의 오른쪽 위 모서리에서 프로필 사진을 선택하고 설정을 선택합니다.

  2. 개발자 설정을 선택합니다.

  3. 개인용 액세스 토큰 아래에서 세분화된 토큰을 선택합니다.

  4. Generate new token(새 토큰 생성)을 탭합니다.

  5. 새 세분화된 개인용 액세스 토큰 화면에서 다음 값을 입력합니다.

    설정
    토큰 이름 토큰 이름을 입력합니다.
    만료 30일을 선택합니다.
    리포지토리 액세스 리포지토리만 선택, 만든 리포지토리를 차례로 선택합니다.

    리포지토리 권한에 대해 다음 값을 입력합니다.

    설정
    actions 읽기 전용을 선택합니다.
    관리 읽기 및 쓰기를 선택합니다.
    메타데이터 읽기 전용을 선택합니다.
  6. 토큰 생성을 선택합니다.

  7. 토큰 값을 복사합니다.

  8. 나중에 실행기 및 크기 조정 규칙을 구성하는 데 사용되는 변수를 정의합니다.

    GITHUB_PAT="<GITHUB_PAT>"
    REPO_OWNER="<REPO_OWNER>"
    REPO_NAME="<REPO_NAME>"
    

    자리 표시자를 다음 값으로 바꿉니다.

    자리 표시자
    <GITHUB_PAT> 생성한 GitHub PAT입니다.
    <REPO_OWNER> 이전에 만든 리포지토리의 소유자입니다. 이 값은 일반적으로 GitHub 사용자 이름입니다.
    <REPO_NAME> 이전에 만든 리포지토리의 이름입니다. 이 값은 리포지토리 이름 필드에 입력한 이름과 동일합니다.

GitHub Actions 실행기 컨테이너 이미지 빌드

자체 호스팅 실행기를 만들려면 실행기를 실행하는 컨테이너 이미지를 빌드해야 합니다. 이 섹션에서는 컨테이너 이미지를 빌드하고 이를 컨테이너 레지스트리에 푸시합니다.

참고 항목

이 자습서에서 빌드하는 이미지에는 Container Apps 작업으로 실행하는 데 적합한 기본 자체 호스팅 실행기가 포함됩니다. 워크플로에 필요한 추가 도구 또는 종속성을 포함하도록 사용자 지정할 수 있습니다.

  1. 컨테이너 이미지 및 레지스트리의 이름을 정의합니다.

    CONTAINER_IMAGE_NAME="github-actions-runner:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    <CONTAINER_REGISTRY_NAME>을 컨테이너 레지스트리를 만들기 위한 고유한 이름으로 바꿉니다. 컨테이너 레지스트리 이름은 Azure 내에서 고유해야 하며 숫자와 소문자만 포함하여 5~50자여야 합니다.

  2. 컨테이너 레지스트리를 만듭니다.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic
    
  3. 컨테이너 레지스트리는 관리 ID를 사용하여 이미지를 끌어오기 위해 인증을 위해 ARM(Azure Resource Manager) 대상 그룹 토큰을 허용해야 합니다.

    다음 명령을 사용하여 ARM 토큰이 ACR(Azure Container Registry)에 액세스할 수 있는지 확인합니다.

    az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"
    

    ARM 토큰이 허용되는 경우 명령은 다음을 출력합니다.

    {
      "status": "enabled"
    }
    

    status disabled경우 다음 명령을 사용하여 ARM 토큰을 허용합니다.

    az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabled
    
  4. 실행기 이미지를 만들기 위한 Dockerfile은 GitHub에서 사용할 수 있습니다. 다음 명령을 실행하여 리포지토리를 복제하고, az acr build 명령을 사용하여 컨테이너 이미지를 클라우드에 빌드합니다.

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        --file "Dockerfile.github" \
        "https://github.com/Azure-Samples/container-apps-ci-cd-runner-tutorial.git"
    

    이제 컨테이너 레지스트리에서 이미지를 사용할 수 있습니다.

사용자 할당 관리 ID 만들기

관리 자격 증명을 사용하지 않도록 하려면 인증에 관리 ID를 사용하여 Microsoft Azure Container Registry의 프라이빗 리포지토리에서 이미지를 끌어오면 됩니다. 가능하면 사용자 할당 관리 ID를 사용하여 이미지를 가져옵니다.

  1. 사용자가 할당한 관리 ID 만들기 다음 명령을 실행하기 전에 관리 ID의 이름을 선택하고 이름을 바꿉 \<PLACEHOLDER\> 니다.

    IDENTITY="<YOUR_IDENTITY_NAME>"
    
    az identity create \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP
    
  2. ID의 리소스 ID를 가져옵니다.

    IDENTITY_ID=$(az identity show \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    

자체 호스팅 실행기를 작업으로 배포

이제 컨테이너 이미지를 사용하는 작업을 만들 수 있습니다. 이 섹션에서는 자체 호스팅 실행기를 실행하고 이전에 생성한 PAT를 사용하여 GitHub에 인증하는 작업을 만듭니다. 작업은 github-runner 크기 조정 규칙을 사용하여 보류 중인 워크플로 실행 수에 따라 작업 실행을 만듭니다.

  1. Container Apps 환경에서 작업을 만듭니다.

    az containerapp job create \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --environment "$ENVIRONMENT" \
        --trigger-type Event \
        --replica-timeout 1800 \
        --replica-retry-limit 0 \
        --replica-completion-count 1 \
        --parallelism 1 \
        --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
        --min-executions 0 \
        --max-executions 10 \
        --polling-interval 30 \
        --scale-rule-name "github-runner" \
        --scale-rule-type "github-runner" \
        --scale-rule-metadata "githubAPIURL=https://api.github.com" "owner=$REPO_OWNER" "runnerScope=repo" "repos=$REPO_NAME" "targetWorkflowQueueLength=1" \
        --scale-rule-auth "personalAccessToken=personal-access-token" \
        --cpu "2.0" \
        --memory "4Gi" \
        --secrets "personal-access-token=$GITHUB_PAT" \
        --env-vars "GITHUB_PAT=secretref:personal-access-token" "GH_URL=https://github.com/$REPO_OWNER/$REPO_NAME" "REGISTRATION_TOKEN_API_URL=https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/actions/runners/registration-token" \
        --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io" \
        --mi-user-assigned "$IDENTITY_ID" \
        --registry-identity "$IDENTITY_ID"
    

    다음 표에서는 명령에 사용되는 주요 매개 변수를 설명합니다.

    매개 변수 설명
    --replica-timeout 복제본을 실행할 수 있는 최대 기간입니다.
    --replica-retry-limit 실패한 복제본을 다시 시도하는 횟수입니다.
    --replica-completion-count 작업 실행이 성공한 것으로 간주되기 전에 성공적으로 완료해야 하는 복제본 수입니다.
    --parallelism 작업 실행당 시작할 복제본 수입니다.
    --min-executions 폴링 간격당 실행할 최소 작업 실행 수입니다.
    --max-executions 폴링 간격당 실행할 최대 작업 실행 수입니다.
    --polling-interval 크기 조정 규칙을 평가할 폴링 간격입니다.
    --scale-rule-name 크기 조정 규칙의 이름입니다.
    --scale-rule-type 사용할 크기 조정 규칙의 형식입니다. GitHub 실행기 크기 조정기에 대한 자세한 내용은 KEDA 설명서를 참조하세요.
    --scale-rule-metadata 크기 조정 규칙에 대한 메타데이터입니다. GitHub Enterprise를 사용하는 경우 githubAPIURL을 API URL로 업데이트합니다.
    --scale-rule-auth 크기 조정 규칙에 대한 인증입니다.
    --secrets 작업에 사용할 비밀입니다.
    --env-vars 작업에 사용할 환경 변수입니다.
    --registry-server 작업에 사용할 컨테이너 레지스트리 서버입니다. Azure Container Registry의 경우 명령은 자동으로 인증을 구성합니다.
    --mi-user-assigned 작업에 할당할 사용자 할당 관리 ID의 리소스 ID입니다.
    --registry-identity 사용자 이름 및 암호를 사용하는 대신 레지스트리 서버에서 인증할 관리 ID의 리소스 ID입니다. 가능하면 ID에 대한 'acrpull' 역할 할당이 자동으로 만들어집니다.

    크기 조정 규칙 구성은 모니터링할 이벤트 원본을 정의합니다. 각 폴링 간격에 따라 규칙이 평가되어 트리거할 작업 실행 수를 결정합니다. 자세한 내용은 크기 조정 규칙 설정을 참조하세요.

이제 이벤트 기반 작업이 Container Apps 환경에 만들어집니다.

워크플로 실행 및 작업 확인

작업은 30초마다 크기 조정 규칙을 평가하도록 구성됩니다. 각 평가 중에 자체 호스팅 실행기가 필요한 보류 중인 워크플로 실행 수를 확인하고, 최대 10개의 실행이 구성된 보류 중인 워크플로에 대한 새 작업 실행을 시작합니다.

작업이 올바르게 구성되었는지 확인하려면 자체 호스팅 실행기를 사용하고 워크플로 실행을 트리거하도록 워크플로를 수정합니다. 그런 다음, 작업 실행 로그를 보고 워크플로 실행을 확인할 수 있습니다.

  1. GitHub 리포지토리에서 이전에 생성한 워크플로로 이동합니다. 이는 .github/workflows 디렉터리에 있는 YAML 파일입니다.

  2. 지금 편집을 선택합니다.

  3. runs-on 속성을 self-hosted로 업데이트합니다.

    runs-on: self-hosted
    
  4. 변경 내용 커밋...을 선택합니다.

  5. 변경 내용 커밋을 선택합니다.

  6. 작업 탭으로 이동합니다.

    이제 새 워크플로가 큐에 있습니다. 30초 이내에 작업 실행이 시작되고 워크플로가 곧 완료됩니다.

    다음 단계로 진행하기 전에 작업이 완료될 때까지 기다리세요.

  7. 작업 실행을 나열하여 작업 실행이 만들어졌고 성공적으로 완료되었는지 확인합니다.

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output table \
        --query '[].{Status: properties.status, Name: name, StartTime: properties.startTime}'
    

Azure DevOps 프로젝트 및 리포지토리 만들기

파이프라인을 실행하려면 Azure DevOps 프로젝트와 리포지토리가 필요합니다.

  1. Azure DevOps로 이동하여 계정에 로그인합니다.

  2. 기존 조직을 선택하거나 새 조직을 만듭니다.

  3. 조직 개요 페이지에서 새 프로젝트를 선택하고 다음 값을 입력합니다.

    설정
    프로젝트 이름 프로젝트의 이름을 입력합니다.
    표시 프라이빗을 선택합니다.
  4. 만들기를 실행합니다.

  5. 측면 탐색 영역에서 리포지토리를 선택합니다.

  6. 추가 정보 또는 .gitignore를 사용하여 기본 분기 초기화 아래에서 추가 정보 추가를 선택합니다.

  7. 나머지 값은 기본값으로 그대로 두고 초기화를 선택합니다.

새 에이전트 풀 만들기

자체 호스팅 실행기를 실행할 새 에이전트 풀을 만듭니다.

  1. Azure DevOps 프로젝트에서 왼쪽 탐색 모음을 펼치고 프로젝트 설정을 선택합니다.

    Azure DevOps 프로젝트 설정 단추의 스크린샷.

  2. 프로젝트 설정 탐색 메뉴의 파이프라인 섹션 아래에서 에이전트 풀을 선택합니다.

    Azure DevOps 에이전트 풀 단추의 스크린샷.

  3. 풀 추가를 선택하고 다음 값을 입력합니다.

    설정
    링크할 풀 새로 만들기를 선택합니다.
    풀 유형 자체 호스팅을 선택합니다.
    이름 컨테이너 앱을 입력합니다.
    모든 파이프라인에 액세스 권한 부여 이 확인란을 선택합니다.
  4. 만들기를 실행합니다.

Azure DevOps 개인용 액세스 토큰 가져오기

자체 호스팅 실행기를 실행하려면 Azure DevOps에서 PAT(개인용 액세스 토큰)를 만들어야 합니다. PAT는 실행기를 Azure DevOps에 인증하는 데 사용됩니다. 또한 크기 조정 규칙에서 보류 중인 파이프라인 실행 수를 결정하고 새 작업 실행을 트리거하는 데 사용됩니다.

[!NOTE]

PAT(개인용 액세스 토큰)의 만료 날짜가 있습니다. 토큰이 유효하게 유지(만료되지 않음)되도록 정기적으로 토큰을 회전하여 중단 없는 서비스를 유지합니다.

  1. Azure DevOps에서 오른쪽 위 모서리의 프로필 사진 옆에 있는 사용자 설정을 선택합니다.

  2. 개인용 액세스 토큰을 선택합니다.

  3. 개인용 액세스 토큰 페이지에서 새 토큰을 선택하고 다음 값을 입력합니다.

    설정
    이름 토큰 이름을 입력합니다.
    조직 이전에 선택했거나 만든 조직을 선택합니다.
    범위 사용자 지정 정의를 선택합니다.
    모든 범위 표시 모든 범위 표시를 선택합니다.
    에이전트 풀(읽기 및 관리) 에이전트 풀(읽기 및 관리)을 선택합니다.

    다른 모든 범위는 선택 취소된 상태로 둡니다.

  4. 만들기를 실행합니다.

  5. 토큰 값을 안전한 위치에 복사합니다.

    페이지를 떠나면 토큰을 검색할 수 없습니다.

  6. 나중에 Container Apps 작업을 구성하는 데 사용되는 변수를 정의합니다.

    AZP_TOKEN="<AZP_TOKEN>"
    ORGANIZATION_URL="<ORGANIZATION_URL>"
    AZP_POOL="container-apps"
    REGISTRATION_TOKEN_API_URL="<YOUR_REGISTRATION_TOKEN_API_URL>"
    

    자리 표시자를 다음 값으로 바꿉니다.

    자리 표시자 설명
    <AZP_TOKEN> 생성한 Azure DevOps PAT입니다.
    <ORGANIZATION_URL> Azure DevOps 조직의 URL입니다. 후행 /가 URL 끝에 없는지 확인합니다. 예를 들어 https://dev.azure.com/myorg 또는 https://myorg.visualstudio.com입니다.
    <YOUR_REGISTRATION_TOKEN_API_URL> entrypoint.sh 파일의 등록 토큰 API URL입니다. 예: 'https://myapi.example.com/get-token'

Azure Pipelines 에이전트 컨테이너 이미지 빌드

자체 호스팅 에이전트를 만들려면 에이전트를 실행하는 컨테이너 이미지를 빌드해야 합니다. 이 섹션에서는 컨테이너 이미지를 빌드하고 이를 컨테이너 레지스트리에 푸시합니다.

참고 항목

이 자습서에서 빌드하는 이미지에는 Container Apps 작업으로 실행하는 데 적합한 기본 자체 호스팅 에이전트가 포함됩니다. 파이프라인에 필요한 추가 도구 또는 종속성을 포함하도록 사용자 지정할 수 있습니다.

  1. 터미널로 돌아가서 컨테이너 이미지 및 레지스트리의 이름을 정의합니다.

    CONTAINER_IMAGE_NAME="azure-pipelines-agent:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    <CONTAINER_REGISTRY_NAME>을 컨테이너 레지스트리를 만들기 위한 고유한 이름으로 바꿉니다.

    컨테이너 레지스트리 이름은 Azure 내에서 고유해야 하며 숫자와 소문자만 포함하여 5~50자여야 합니다.

  2. 컨테이너 레지스트리를 만듭니다.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic \
        --admin-enabled true
    
  3. 실행기 이미지를 만들기 위한 Dockerfile은 GitHub에서 사용할 수 있습니다. 다음 명령을 실행하여 리포지토리를 복제하고, az acr build 명령을 사용하여 컨테이너 이미지를 클라우드에 빌드합니다.

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        --file "Dockerfile.azure-pipelines" \
        "https://github.com/Azure-Samples/container-apps-ci-cd-runner-tutorial.git"
    

    이제 컨테이너 레지스트리에서 이미지를 사용할 수 있습니다.

자리 표시자 자체 호스팅 에이전트 만들기

새 에이전트 풀에서 자체 호스팅 에이전트를 실행하려면 먼저 자리 표시자 에이전트를 만들어야 합니다. 자리 표시자 에이전트는 에이전트 풀을 사용할 수 있는지 확인합니다. 자리 표시자 에이전트가 없으면 에이전트 풀을 사용하는 파이프라인이 실패합니다.

수동 작업을 실행하여 오프라인 자리 표시자 에이전트를 등록할 수 있습니다. 작업은 한 번 실행되며 삭제할 수 있습니다. 자리 표시자 에이전트는 Azure Container Apps 또는 Azure DevOps의 리소스를 사용하지 않습니다.

  1. Container Apps 환경에서 자리 표시자 에이전트를 만드는 수동 작업을 만듭니다.

    az containerapp job create -n "$PLACEHOLDER_JOB_NAME" -g "$RESOURCE_GROUP" --environment "$ENVIRONMENT" \
        --trigger-type Manual \
        --replica-timeout 300 \
        --replica-retry-limit 0 \
        --replica-completion-count 1 \
        --parallelism 1 \
        --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
        --cpu "2.0" \
        --memory "4Gi" \
        --secrets "personal-access-token=$AZP_TOKEN" "organization-url=$ORGANIZATION_URL" \
        --env-vars "AZP_TOKEN=secretref:personal-access-token" "AZP_URL=secretref:organization-url" "AZP_POOL=$AZP_POOL" "AZP_PLACEHOLDER=1" "AZP_AGENT_NAME=placeholder-agent" \
        --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io"
    

    다음 표에서는 명령에 사용되는 주요 매개 변수를 설명합니다.

    매개 변수 설명
    --replica-timeout 복제본을 실행할 수 있는 최대 기간입니다.
    --replica-retry-limit 실패한 복제본을 다시 시도하는 횟수입니다.
    --replica-completion-count 작업 실행이 성공한 것으로 간주되기 전에 성공적으로 완료해야 하는 복제본 수입니다.
    --parallelism 작업 실행당 시작할 복제본 수입니다.
    --secrets 작업에 사용할 비밀입니다.
    --env-vars 작업에 사용할 환경 변수입니다.
    --registry-server 작업에 사용할 컨테이너 레지스트리 서버입니다. Azure Container Registry의 경우 명령은 자동으로 인증을 구성합니다.

    AZP_PLACEHOLDER 환경 변수를 설정하면 작업을 실행하지 않고 오프라인 자리 표시자 에이전트로 등록하도록 에이전트 컨테이너가 구성됩니다.

  2. 수동 작업을 실행하여 자리 표시자 에이전트를 만듭니다.

    az containerapp job start -n "$PLACEHOLDER_JOB_NAME" -g "$RESOURCE_GROUP"
    
  3. 작업 실행을 나열하여 작업 실행이 만들어졌고 성공적으로 완료되었는지 확인합니다.

    az containerapp job execution list \
        --name "$PLACEHOLDER_JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output table \
        --query '[].{Status: properties.status, Name: name, StartTime: properties.startTime}'
    
  4. 자리 표시자 에이전트가 Azure DevOps에 만들어졌는지 확인합니다.

    1. Azure DevOps에서 프로젝트로 이동합니다.
    2. 프로젝트 설정>에이전트 풀>container-apps>에이전트를 차례로 선택합니다.
    3. placeholder-agent라는 자리 표시자 에이전트가 나열되고 해당 상태가 오프라인인지 확인합니다.
  5. 이 직업은 다시 필요하지 않습니다. 삭제할 수 있습니다.

    az containerapp job delete -n "$PLACEHOLDER_JOB_NAME" -g "$RESOURCE_GROUP"
    

자체 호스팅 에이전트를 이벤트 기반 작업으로 만들기

이제 자리 표시자 에이전트가 있으므로 자체 호스팅 에이전트를 만들 수 있습니다. 이 섹션에서는 파이프라인이 트리거되면 자체 호스팅 에이전트를 실행하는 이벤트 기반 작업을 만듭니다.

az containerapp job create -n "$JOB_NAME" -g "$RESOURCE_GROUP" --environment "$ENVIRONMENT" \
    --trigger-type Event \
    --replica-timeout 1800 \
    --replica-retry-limit 0 \
    --replica-completion-count 1 \
    --parallelism 1 \
    --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
    --min-executions 0 \
    --max-executions 10 \
    --polling-interval 30 \
    --scale-rule-name "azure-pipelines" \
    --scale-rule-type "azure-pipelines" \
    --scale-rule-metadata "poolName=$AZP_POOL" "targetPipelinesQueueLength=1" \
    --scale-rule-auth "personalAccessToken=personal-access-token" "organizationURL=organization-url" \
    --cpu "2.0" \
    --memory "4Gi" \
    --secrets "personal-access-token=$AZP_TOKEN" "organization-url=$ORGANIZATION_URL" \
    --env-vars "AZP_TOKEN=secretref:personal-access-token" "AZP_URL=secretref:organization-url" "AZP_POOL=$AZP_POOL" \
    --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io"

다음 표에서는 명령에 사용되는 크기 조정 규칙 매개 변수를 설명합니다.

매개 변수 설명
--min-executions 폴링 간격당 실행할 최소 작업 실행 수입니다.
--max-executions 폴링 간격당 실행할 최대 작업 실행 수입니다.
--polling-interval 크기 조정 규칙을 평가할 폴링 간격입니다.
--scale-rule-name 크기 조정 규칙의 이름입니다.
--scale-rule-type 사용할 크기 조정 규칙의 형식입니다. Azure Pipelines 실행기 크기 조정기에 대한 자세한 내용은 KEDA 설명서를 참조하세요.
--scale-rule-metadata 크기 조정 규칙에 대한 메타데이터입니다.
--scale-rule-auth 크기 조정 규칙에 대한 인증입니다.

크기 조정 규칙 구성은 모니터링할 이벤트 원본을 정의합니다. 각 폴링 간격에 따라 규칙이 평가되어 트리거할 작업 실행 수를 결정합니다. 자세한 내용은 크기 조정 규칙 설정을 참조하세요.

이제 이벤트 기반 작업이 Container Apps 환경에 만들어집니다.

파이프라인 실행 및 작업 확인

자체 호스팅 에이전트 작업이 구성되면 파이프라인을 실행하고 제대로 작동하는지 확인할 수 있습니다.

  1. Azure DevOps 프로젝트의 왼쪽 탐색 영역에서 파이프라인으로 이동합니다.

  2. 파이프라인 만들기를 선택합니다.

  3. Azure Repos Git을 코드 위치로 선택합니다.

  4. 이전에 만든 리포지토리를 선택합니다.

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

  6. 파이프라인 YAML에서 poolvmImage: ubuntu-latest에서 name: container-apps로 변경합니다.

    pool:
      name: container-apps
    
  7. 저장 및 실행을 선택합니다.

    파이프라인은 Container Apps 환경에서 만든 자체 호스팅 에이전트 작업을 실행하고 사용합니다.

  8. 작업 실행을 나열하여 작업 실행이 만들어졌고 성공적으로 완료되었는지 확인합니다.

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output table \
        --query '[].{Status: properties.status, Name: name, StartTime: properties.startTime}'
    

문제가 있나요? Azure Container Apps 리포지토리에서 문제를 열어 GitHub에 알려주세요.

리소스 정리

완료되면 다음 명령을 실행하여 Container Apps 리소스가 포함된 리소스 그룹을 삭제합니다.

주의

다음 명령은 지정된 리소스 그룹과 그 안에 포함된 모든 리소스를 삭제합니다. 지정된 리소스 그룹에 이 자습서의 범위에 속하지 않는 리소스가 포함된 경우 해당 리소스도 삭제됩니다.

az group delete \
    --resource-group $RESOURCE_GROUP

GitHub 리포지토리를 삭제하려면 리포지토리 삭제를 참조하세요.

다음 단계