다음을 통해 공유


Azure 가상 머신 확장 집합 에이전트

Azure DevOps Services

이후 확장 집합 에이전트라고 하는 Azure Virtual Machine Scale Set 에이전트는 요구 사항에 맞게 자동 크기 조정될 수 있는 자체 호스팅 에이전트의 한 형태입니다. 이처럼 탄력적이므로 항상 전용 에이전트를 실행할 필요성이 감소합니다. Microsoft 호스팅 에이전트와 달리, 에이전트가 실행되는 컴퓨터의 크기와 이미지가 유연합니다.

관리형 DevOps 풀은 Azure DevOps Virtual Machine Scale Set 에이전트 풀의 진화된 새로운 서비스로, 사용자 지정 풀의 확장성 및 안정성을 개선하여 사용자 지정 풀 만들기를 더욱 간소화합니다. 관리형 DevOps 풀은 에이전트를 구동하는 가상 머신 또는 컨테이너가 Azure DevOps Virtual Machine Scale Set 에이전트 풀을 사용하는 경우와 같이 사용자 고유의 Azure 구독이 아닌 Microsoft Azure 구독에 있는 완전 관리형 서비스입니다. 자세한 내용은 관리형 DevOps 풀 설명서를 참조하세요.

Microsoft 호스팅 에이전트를 좋아하지만 제공하는 항목에 의해 제한되는 경우 확장 집합 에이전트를 고려해야 합니다. 다음 몇 가지 예를 참조하세요.

  • 기본 Microsoft 호스팅 에이전트에서 제공하는 것보다 더 많은 메모리, 더 많은 프로세서, 더 많은 스토리지 또는 더 많은 IO가 필요합니다.
  • 기계 학습을 위한 특정 명령어 집합이 포함된 NCv2 VM이 필요한 경우.
  • 인바운드 연결 없이 프라이빗 VNET의 프라이빗 Azure App Service에 배포해야 하는 경우.
  • Microsoft 호스팅 에이전트가 서버와 통신할 수 있도록 특정 IP 주소에 대한 회사 방화벽을 열어야 합니다.
  • 에이전트 컴퓨터의 네트워크 연결을 제한하고 승인된 사이트에만 연결할 수 있도록 허용해야 합니다.
  • 요구 사항을 충족하기 위해 Microsoft에서 에이전트를 충분히 확보할 수 없는 경우.
  • 작업이 Microsoft 호스트된 에이전트 제한 시간을 초과하는 경우.
  • Microsoft 호스팅 병렬 작업을 조직의 개별 프로젝트 또는 팀으로 분할할 수 없습니다.
  • 증분 원본 및 컴퓨터 수준 패키지 캐시를 활용하기 위해 에이전트에서 여러 연속 작업을 실행하려고 하는 경우.
  • 에이전트가 작업 수락을 시작하기 전에 구성 또는 캐시 준비 작업을 실행하려고 합니다.

자체 호스팅 에이전트를 좋아하지만 관리를 간소화할 수 있기를 바라는 경우 확장 집합 에이전트를 고려해야 합니다. 다음 몇 가지 예를 참조하세요.

  • 24시간 전담 에이전트를 운영하고 싶지 않은 경우. 작업을 실행하는 데 사용되지 않는 에이전트 컴퓨터를 프로비전 해제하려고 하는 경우.
  • 파이프라인에서 신뢰할 수 없는 코드를 실행하고 각 작업 후에 에이전트 컴퓨터를 이미지로 다시 설치하려고 하는 경우.
  • 에이전트의 기본 이미지를 주기적으로 업데이트하는 작업을 간소화하려고 합니다.

참고 항목

  • 확장 집합을 사용하여 Mac 에이전트를 실행할 수 없습니다. 이러한 방식으로 Windows 또는 Linux 에이전트만 실행할 수 있습니다.

  • Azure DevOps Services에 Virtual Machine Scale Sets 에이전트 풀을 사용하는 것은 Azure 퍼블릭(글로벌 서비스) 클라우드에서만 지원됩니다. 현재 Virtual Machine Scale Sets 에이전트 풀은 다른 국가별 클라우드 제품을 지원하지 않습니다.

  • 가상 머신 확장 집합을 여러 풀에 연결해서는 안 됩니다.

확장 집합 만들기

확장 집합 에이전트를 만들기 위한 준비에서는 먼저 Azure Portal에서 Virtual Machine Scale Set를 만들어야 합니다. Azure Pipelines에서 관리할 수 있도록 특정 방식으로 Virtual Machine Scale Set을 만들어야 합니다. 특히 Azure Pipelines에서 들어오는 파이프라인 작업의 수에 따라 크기 조정을 수행하는 방법을 결정할 수 있도록 자동 크기 조정을 사용하지 않도록 설정 해야 합니다. 확장 집합을 만들려면 다음 단계를 사용하는 것이 좋습니다.

다음 예제에서는 UbuntuLTS VM 이미지를 사용하여 Azure Cloud Shell을 사용하여 새 리소스 그룹 및 Virtual Machine Scale Set을 만듭니다.

참고 항목

이 예제에서는 확장 집합에 UbuntuLTS VM 이미지가 사용됩니다. 에이전트의 기준으로 사용자 지정된 VM 이미지가 필요한 경우 사용자 지정 이미지, 소프트웨어 또는 디스크 크기로 확장 집합 만들기의 단계에 따라 확장 집합을 만들기 전에 사용자 지정된 이미지를 만듭니다.

  1. 에서 Azure Cloud Shellhttps://shell.azure.com/이동

  2. 다음 명령을 실행하여 기본 Azure 구독을 확인합니다.

    az account list -o table
    

    원하는 구독이 기본값으로 나열되지 않으면 원하는 구독을 선택합니다.

    az account set -s <your subscription ID>
    
  3. Virtual Machine Scale Set에 대한 리소스 그룹을 만듭니다.

    az group create \
    --location westus \
    --name vmssagents
    
  4. 리소스 그룹에 Virtual Machine Scale Set를 만듭니다. 이 예제에서는 Ubuntu2204 VM 이미지가 지정됩니다.

    az vmss create \
    --name vmssagentspool \
    --resource-group vmssagents \
    --image Ubuntu2204 \
    --vm-sku Standard_D2_v4 \
    --storage-sku StandardSSD_LRS \
    --authentication-type SSH \
    --generate-ssh-keys \
    --instance-count 2 \
    --disable-overprovision \
    --upgrade-policy-mode manual \
    --single-placement-group false \
    --platform-fault-domain-count 1 \
    --load-balancer "" \
    --orchestration-mode Uniform
    

    참고 항목

    Azure Pipelines는 확장 집합 오버프로비전 및 자동 크기 조정을 지원하지 않습니다. 확장 집합에 대해 두 기능을 모두 사용하지 않도록 설정해야 합니다.

    Azure Pipelines는 확장 집합을 관리하므로 다음 설정이 필요하거나 권장됩니다.

    • --disable-overprovision -필수
    • --upgrade-policy-mode manual -필수
    • --load-balancer "" - Azure Pipelines는 부하 분산 장치가 확장 집합 에이전트 풀의 에이전트로 작업을 라우팅할 필요가 없지만 부하 분산 장치를 구성하는 것은 방화벽 규칙에 사용할 수 있는 확장 집합 에이전트의 IP 주소를 가져오는 한 가지 방법입니다. 확장 집합 에이전트의 IP 주소를 가져오는 또 다른 옵션은 옵션을 사용하여 확장 집합을 --public-ip-address 만드는 것입니다. 부하 분산 장치 또는 공용 IP 주소를 사용하여 확장 집합을 구성하는 방법에 대한 자세한 내용은 Virtual Machine Scale Sets 설명서az vmss create를 참조하세요.
    • --instance-count 2 - 이 설정은 필요하지 않지만 에이전트 풀을 만들기 전에 확장 집합이 완벽하게 작동하는지 확인할 수 있는 기회를 제공합니다. 두 VM을 만드는 데 몇 분 정도 걸릴 수 있습니다. 나중에 에이전트 풀을 만들 때 Azure Pipelines는 이러한 두 VM을 삭제하고 새 VM을 만듭니다.

    Important

    Windows에서 Azure CLI를 사용하여 이 스크립트를 실행하는 경우 다음과 같이 작은따옴표로 인을 "" --load-balancer "" 묶어야 합니다. --load-balancer '""'

    VM 크기가 임시 OS 디스크를 지원하는 경우 임시 OS 디스크를 사용하도록 설정하는 다음 매개 변수는 선택 사항이지만 가상 머신 이미지 재이미지 시간을 개선하는 것이 좋습니다.

    • --ephemeral-os-disk true
    • --os-disk-caching readonly

    Important

    임시 OS 디스크는 모든 VM 크기에서 지원되지 않습니다. 지원되는 VM 크기 목록은 Azure VM에 대한 임시 OS 디스크를 참조 하세요.

    Azure Marketplace 또는 사용자 지정 이미지에서 Linux 또는 Windows 이미지를 선택하여 확장 집합을 만듭니다. 이미지에 Azure Pipelines 에이전트를 미리 설치하지 마세요. Azure Pipelines는 새 가상 머신을 프로비전할 때 에이전트를 자동으로 설치합니다. 위의 예제에서는 일반 UbuntuLTS 이미지를 사용했습니다. 사용자 지정 이미지를 만들고 사용하는 방법에 대한 지침은 FAQ를 참조 하세요.

    VM SKU 및 스토리지 SKU를 선택합니다.

    참고 항목

    라이선스 고려 사항은 Microsoft 호스팅 이미지를 배포하는 것을 제한합니다. 확장 집합 에이전트에서 사용할 수 있도록 이러한 이미지를 제공할 수 없습니다. 그러나 이러한 이미지를 생성하는 데 사용하는 스크립트는 오픈 소스. 이러한 스크립트를 자유롭게 사용하고 사용자 지정 이미지를 만들 수 있습니다.

  5. 확장 집합을 만든 후 Azure Portal에서 확장 집합으로 이동하여 다음 설정을 확인합니다.

    • 업그레이드 정책 - 수동

      업그레이드 정책을 확인합니다.

      다음 Azure CLI 명령을 실행하여 이 설정을 확인할 수도 있습니다.

      az vmss show --resource-group vmssagents --name vmssagentspool --output table
      
      Name            ResourceGroup    Location    Zones    Capacity    Overprovision    UpgradePolicy
      --------------  ---------------  ----------  -------  ----------  ---------------  ---------------
      vmssagentspool  vmssagents       westus               0           False            Manual
      
    • 크기 조정 - 수동 크기 조정

      수동 크기 조정 정책을 확인합니다.

Important

Azure Pipelines는 인스턴스 보호를 지원하지 않습니다. 확장확장 집합 작업 인스턴스 보호를 사용하지 않도록 설정했는지 확인합니다.

오케스트레이션 모드

Azure 가상 머신 확장 집합은 두 가지 오케스트레이션 모드인 Uniform 및 Flexible로 구성할 수 있습니다. 균일 오케스트레이션 모드에 대한 Azure Pipelines 지원은 일반적으로 모든 고객에게 제공됩니다.

유연한 오케스트레이션 모드를 사용하면 Azure Pipelines가 여러 확장 집합 작업을 병렬로 큐에 대기할 수 있습니다. 유연한 오케스트레이션에 대한 Azure Pipelines 지원은 요청 시 사용할 수 있으며 평가 대상이 됩니다. 고객의 사용 패턴은 이 패턴의 상당한 이점을 나타내야 합니다. 이러한 고객은 대규모 집합을 가지고 있고, 여러 작업에 에이전트를 다시 사용하지 않으며, 여러 개의 단기 작업을 병렬로 실행하며, VM에서 임시 디스크만 사용합니다. 이 기능을 사용하려면 지원 팀에 문의하세요.

확장 집합 에이전트 풀 만들기

  1. Azure DevOps 프로젝트 설정으로 이동하고, 파이프라인 아래에서 에이전트 풀을 선택하고, 풀 추가를 선택하여 새 에이전트 풀을 만듭니다.

    에이전트 풀을 만듭니다.

    Important

    프로젝트 설정 또는 조직 설정에서 확장 집합 풀을 만들 수 있지만 확장 집합 풀을 삭제하는 경우 프로젝트 설정이 아닌 조직 설정에서 삭제해야 합니다.

  2. 풀 유형에 대한 Azure Virtual Machine Scale Set을 선택합니다. 확장 집합이 포함된 Azure 구독을 선택하고 권한 부여를 선택한 다음 해당 구독에서 원하는 Virtual Machine Scale Set을 선택합니다. 기존 서비스 연결이 있는 경우 구독 대신 목록에서 선택할 수 있습니다.

    Important

    • 확장 집합 에이전트 풀을 구성하려면 선택한 구독에 대한 소유자 또는 사용자 액세스 관리자 권한이 있어야 합니다. 이러한 권한 중 하나가 있지만 권한 부여를 선택할 때 오류가 발생하는 경우 문제 해결을 참조하세요.

    • 현재 지원되는 유일한 서비스 연결은 서비스 주체 키를 기반으로 하는 ARM(Azure Resource Manager) 서비스 연결입니다. 인증서 자격 증명 또는 관리 ID를 기반으로 하는 ARM 서비스 연결이 실패합니다. 구독에서 기존 확장 집합을 나열하려고 하면 다음과 같은 오류가 표시됩니다.

      Invalid Service Endpoint with Id <guid> and Scope <guid>

  3. 해당 구독에서 원하는 Virtual Machine Scale Set을 선택합니다.

  4. 에이전트 풀의 이름을 지정합니다.

  5. 다음 옵션을 구성합니다.

    • 모든 사용 후 가상 머신이 자동으로 중단됩니다. 모든 작업에 새 VM 인스턴스가 사용됩니다. VM은 작업을 실행한 후 오프라인 상태가 되며 다른 작업을 선택하기 전에 이미지로 다시 설치됩니다.
    • 조사를 위해 비정상 에이전트 저장 - 비정상 에이전트 VM을 삭제하는 대신 문제 해결을 위해 저장할지 여부입니다.
    • 확장 집합 의 최대 가상 머신 수 - Azure Pipelines는 에이전트 수를 자동으로 확장하지만 이 제한을 초과하지는 않습니다.
    • 대기 상태로 유지할 에이전트 수 - Azure Pipelines는 에이전트 수에서 자동으로 확장되지만 새 작업을 실행할 수 있는 에이전트가 항상 많이 있는지 확인합니다. 예를 들어 낮은 양의 작업에 대한 비용을 절약하기 위해 대기 상태로 유지할 에이전트 수를 0으로 설정하면 Azure Pipelines는 작업이 있는 경우에만 VM을 시작합니다.
    • 초과 유휴 에이전트 를 삭제하기 몇 분 전에 지연 - 하루 종일 빌드 부하의 가변성을 고려하기 위해 Azure Pipelines는 초과 유휴 에이전트를 삭제하기 전에 지정된 기간 동안 대기합니다.
    • 대화형 테스트를 실행하도록 VM 구성(Windows Server OS만 해당) - Windows 에이전트는 자동 로그온 및 대화형 UI를 사용하여 선택되지 않은 상태로 실행되도록 구성하거나 관리자 권한으로 실행하도록 구성할 수 있습니다. 대화형 UI를 사용하여 선택되지 않은 상태로 실행하려면 이 확인란을 선택합니다. 두 경우 모두 에이전트 사용자는 Administrators 그룹의 구성원입니다.
  6. 설정이 구성되면 만들기를 선택하여 에이전트 풀을 만듭니다.

확장 집합 에이전트 풀 사용

확장 집합 에이전트 풀을 사용하는 것은 다른 에이전트 풀과 비슷합니다. 클래식 빌드, 릴리스 또는 YAML 파이프라인에서 사용할 수 있습니다. 사용자 권한, 파이프라인 권한, 승인 및 기타 검사는 다른 에이전트 풀과 동일한 방식으로 작동합니다. 자세한 내용은 에이전트 풀을 참조 하세요.

Important

Azure Portal에서 확장 집합을 직접 변경할 때는 주의해야 합니다.

  • Azure Portal에서 확장 집합 구성 설정을 많이 변경하지 않을 수 있습니다. Azure Pipelines는 확장 집합의 구성을 업데이트합니다. 확장 집합을 수동으로 변경하면 Azure Pipelines 작업을 방해할 수 있습니다.
  • Azure Pipelines에서 먼저 확장 집합 풀을 삭제하지 않고 확장 집합의 이름을 바꾸거나 삭제할 수 없습니다.

Azure Pipelines에서 확장 집합을 관리하는 방법

확장 집합 에이전트 풀이 만들어지면 Azure Pipelines는 에이전트 머신의 크기를 자동으로 조정합니다.

Azure Pipelines는 5분마다 확장 집합의 풀 및 가상 머신에 있는 에이전트의 상태를 샘플링합니다. 규모 감축 또는 축소 결정은 당시 유휴 에이전트의 수를 기반으로 합니다. 에이전트는 온라인 상태이고 파이프라인 작업을 실행하지 않는 경우 유휴 상태로 간주됩니다. Azure Pipelines는 다음 조건 중 하나가 충족되는 경우 스케일 아웃 작업을 수행합니다.

  • 유휴 에이전트 수는 지정한 대기 에이전트 수보다 낮습니다.
  • 큐에서 대기 중인 서비스 파이프라인 작업에 유휴 에이전트가 없습니다.

이러한 조건 중 하나가 충족되면 Azure Pipelines는 VM 수를 증가합니다. 스케일 아웃은 최대 풀 크기의 특정 비율을 증분하여 수행합니다. 각 단계에 대해 머신을 만드는 데 20분이 걸립니다.

Azure Pipelines는 유휴 에이전트 수가 30분 이상 대기 수를 초과할 때 에이전트의 크기를 조정합니다(초과 유휴 에이전트를 삭제하기 몇 분 전에 지연을 사용하여 구성할 수 있음).

이 모든 것을 예로 들어 보려면 대기 에이전트 2개와 최대 에이전트 4개로 구성된 확장 집합 에이전트 풀을 고려합니다. 사용할 때마다 VM을 중단하려고 합니다. 또한 확장 집합에서 시작할 VM이 없다고 가정해 보겠습니다.

  • 유휴 에이전트 수는 0이고 유휴 에이전트 수는 대기 수인 2보다 낮기 때문에 Azure Pipelines는 규모를 확장하고 확장 집합에 두 개의 VM을 추가합니다. 이러한 에이전트가 온라인 상태가 되면 두 개의 유휴 에이전트가 있습니다.

  • 하나의 파이프라인 작업이 도착하여 에이전트 중 하나에 할당되어 있다고 가정해 보겠습니다.

  • 현재 유휴 에이전트 수는 1이며 대기 개수인 2보다 작습니다. 따라서 Azure Pipelines는 확장되고 2개의 VM(이 예제에 사용된 증분 크기)을 더 추가합니다. 현재 풀에는 유휴 에이전트 3개와 사용 중인 에이전트 1개가 있습니다.

  • 첫 번째 에이전트의 작업이 완료된 경우를 가정해 보겠습니다. Azure Pipelines는 해당 에이전트를 오프라인으로 전환하여 해당 머신을 이미지로 다시 설치합니다. 몇 분 후, 그것은 신선한 이미지와 함께 돌아온다. 현재 4개의 유휴 에이전트가 있습니다.

  • 30분 동안 다른 작업이 도착하지 않는 경우(초과 유휴 에이전트를 삭제하기 전에 지연을 사용하여 구성 가능) Azure Pipelines는 필요한 것보다 더 많은 유휴 에이전트가 있음을 확인합니다. 따라서 풀에서 두 개의 에이전트로 확장됩니다.

이 작업 전체에서 Azure Pipelines의 목표는 대기 중인 원하는 유휴 에이전트 수에 도달하는 것입니다. 풀은 천천히 스케일 아웃 및 스케일 인됩니다. 하루 동안, 요청이 아침에 대기하고 저녁에 부하가 가라 앉을 때 규모가 조정됨에 따라 수영장이 확장됩니다. Azure Pipelines가 지정한 제약 조건에 점진적으로 수렴됨에 따라 다양한 시간에 원하는 것보다 더 많은 유휴 에이전트를 관찰할 수 있습니다.

참고 항목

Azure Pipelines가 가상 머신에서 스케일 아웃 또는 스케일링하는 데 1시간 이상 걸릴 수 있습니다. Azure Pipelines는 단계별로 확장되고, 오류에 대한 작업을 모니터링하고, 사용할 수 없는 컴퓨터를 삭제하고, 시간 과정에서 새 컴퓨터를 만들어 대응합니다. 이 수정 작업은 1시간 이상 걸릴 수 있습니다.

최대 안정성을 달성하기 위해 확장 집합 작업은 순차적으로 수행됩니다. 예를 들어 풀을 확장해야 하고 삭제할 비정상 컴퓨터도 있는 경우 Azure Pipelines는 먼저 풀을 스케일 아웃합니다. 풀이 확장되어 대기 중인 원하는 유휴 에이전트 수에 도달하면 조사 설정을 위해 비정상 에이전트 저장에 따라 비정상 컴퓨터가 삭제됩니다. 자세한 내용은 비정상 에이전트를 참조 하세요.

샘플링 크기가 5분이기 때문에 모든 에이전트가 짧은 시간 동안 파이프라인을 실행할 수 있으며 스케일 아웃이 발생하지 않을 수 있습니다.

파이프라인 에이전트 구성 사용자 지정

확장 집합에 대한 운영 체제 사용자 지정 이미지에서 환경 변수를 정의하여 Azure Pipelines 에이전트의 구성을 사용자 지정할 수 있습니다. 예를 들어 확장 집합 에이전트 작업 디렉터리의 기본값은 Windows의 경우 C:\a이고 Linux의 경우 /agent/_work. 작업 디렉터리를 변경하려면 원하는 작업 디렉터리로 VSTS_AGENT_INPUT_WORK 환경 변수를 설정합니다. 자세한 내용은 Pipelines 에이전트 무인 구성 설명서에서 찾을 수 있습니다. 일부 사례:

  • VSTS_AGENT_INPUT_WORK
  • VSTS_AGENT_INPUT_PROXYURL
  • VSTS_AGENT_INPUT_PROXYUSERNAME
  • VSTS_AGENT_INPUT_PROXYPASSWORD

Important

Pipelines 에이전트를 사용자 지정할 때는 주의해야 합니다. 일부 설정은 다른 필수 설정과 충돌하여 에이전트가 등록에 실패하고 VM이 삭제됩니다. 이러한 설정은 설정하거나 변경해서는 안 됩니다.

  • VSTS_AGENT_INPUT_URL
  • VSTS_AGENT_INPUT_AUTH
  • VSTS_AGENT_INPUT_TOKEN
  • VSTS_AGENT_INPUT_USERNAME
  • VSTS_AGENT_INPUT_PASSWORD
  • VSTS_AGENT_INPUT_POOL
  • VSTS_AGENT_INPUT_AGENT
  • VSTS_AGENT_INPUT_RUNASSERVICE
  • ... 및 배포 그룹과 관련된 모든 항목

사용자 지정 스크립트 확장을 통해 Virtual Machine 시작 사용자 지정

사용자는 해당 컴퓨터가 파이프라인 작업 실행을 시작하기 전에 확장 집합 에이전트 컴퓨터에서 시작 스크립트를 실행할 수 있습니다. 시작 스크립트에 대한 몇 가지 일반적인 사용 사례로는 소프트웨어 설치, 캐시 온난화 또는 리포지토리 가져오기가 포함됩니다. Windows용 사용자 지정 스크립트 확장 또는 Linux용 사용자 지정 스크립트 확장을 설치하여 시작 스크립트를 실행할 수 있습니다.

이 확장은 확장 집합을 만들거나 이미지로 다시 설치한 직후 확장 집합의 모든 가상 머신에서 실행됩니다. 사용자 지정 스크립트 확장은 Azure Pipelines 에이전트 확장이 실행되기 전에 실행됩니다.

Linux용 사용자 지정 스크립트 확장을 만드는 예제는 다음과 같습니다.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScript \
--version 2.0 \
--publisher Microsoft.Azure.Extensions \
--settings '{ \"fileUris\":[\"https://<myGitHubRepoUrl>/myScript.sh\"], \"commandToExecute\": \"bash ./myScript.sh /myArgs \" }'

Windows용 사용자 지정 스크립트 확장을 만드는 예제는 다음과 같습니다.

az vmss extension set \
--vmss-name <scaleset name> \
--resource-group <resource group> \
--name CustomScriptExtension \
--version 1.9 \
--publisher Microsoft.Compute \
--settings '{ \"FileUris\":[\"https://<myGitHubRepoUrl>/myscript.ps1\"], \"commandToExecute\": \"Powershell.exe -ExecutionPolicy Unrestricted -File myscript.ps1 -myargs 0 \" }'

Important

VM에서 VM 만들기 프로세스를 완료하려면 사용자 지정 스크립트 확장에서 실행된 스크립트가 종료 코드 0과 함께 반환되어야 합니다. 사용자 지정 스크립트 확장에서 예외를 throw하거나 0이 아닌 종료 코드를 반환하는 경우 Azure Pipeline 확장이 실행되지 않으며 VM이 Azure DevOps 에이전트 풀에 등록되지 않습니다.

모든 VM 리소스가 프로비전되기 전에 확장이 실행될 수 있습니다. 이 경우 "기본 필수 구성 요소를 설치하지 못했습니다."라는 오류가 표시됩니다. 예를 들어 sleep 30스크립트의 시작 부분에 명령을 추가하여 sleep 이 문제를 해결할 수 있습니다.

확장 집합 에이전트의 수명 주기

Azure Pipelines Virtual Machine Scale Set 에이전트에 대한 작업 흐름은 다음과 같습니다.

  1. Azure DevOps Scale Set 에이전트 풀 크기 조정 작업은 풀에 유휴 에이전트가 너무 적고 규모를 확장해야 한다고 결정합니다. Azure Pipelines는 확장 집합 용량을 늘리기 위해 Azure Scale Sets를 호출합니다.

  2. Azure Scale Set에서 새 가상 머신 만들기를 시작합니다. 가상 머신이 실행되면 Azure Scale Sets는 설치된 모든 VM 확장을 순차적으로 실행합니다.

  3. 사용자 지정 스크립트 확장이 설치된 경우 Azure Pipelines 에이전트 확장 전에 실행됩니다. 사용자 지정 스크립트 확장이 0이 아닌 종료 코드를 반환하는 경우 VM 만들기 프로세스가 중단되고 삭제됩니다.

  4. Azure Pipelines 에이전트 확장이 실행됩니다. 이 확장은 최신 버전의 구성 스크립트와 함께 최신 버전의 Azure Pipelines 에이전트를 다운로드합니다. 구성 스크립트는 다음 형식의 URL에서 찾을 수 있습니다.

    • Linux: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Linux/<script_version>/enableagent.sh예를 들어 버전 15
    • Windows: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Windows/<script_version>/enableagent.ps1예를 들어 버전 17
  5. 구성 스크립트는 운영 체제가 Windows Server 또는 Linux인 경우 명명된 AzDevOps 로컬 사용자를 만듭니다. Windows 10 클라이언트 OS의 경우 에이전트는 LocalSystem으로 실행됩니다. 그런 다음, 스크립트는 Azure Pipelines 에이전트의 압축을 풀고, 설치하고, 구성합니다. 구성의 일부로 에이전트는 Azure DevOps 에이전트 풀에 등록되고 오프라인 상태의 에이전트 풀 목록에 표시됩니다.

  6. 대부분의 시나리오에서 구성 스크립트는 즉시 에이전트를 시작하여 로컬 사용자 AzDevOps로 실행합니다. 에이전트가 온라인 상태가 되어 파이프라인 작업을 실행할 준비가 된 것입니다.

    풀이 대화형 UI에 대해 구성된 경우 에이전트가 구성된 후 가상 머신이 다시 부팅됩니다. 다시 부팅한 후 로컬 사용자가 자동으로 로그인되고 파이프라인 에이전트가 시작됩니다. 그러면 에이전트가 온라인 상태가 되어 파이프라인 작업을 실행할 준비가 된 것입니다.

사용자 지정 이미지, 소프트웨어 또는 디스크 크기를 사용하여 확장 집합 만들기

공개적으로 사용 가능한 Azure 이미지를 사용하여 기본 128GB OS 디스크로 확장 집합을 만들려면 10단계로 바로 건너뛰고 공용 이미지 이름(UbuntuLTS, Win2019DataCenter 등)을 사용하여 확장 집합을 만듭니다. 그렇지 않으면 다음 단계에 따라 VM 이미지를 사용자 지정합니다.

  1. 원하는 OS 이미지를 사용하여 VM을 만들고 필요에 따라 OS 디스크 크기를 128GB에서 128GB로 확장합니다 <myDiskSizeGb>.

    • 사용 가능한 Azure 이미지로 시작하는 경우(예 <: myBaseImage> = (Win2019DataCenter, UbuntuLTS):

      az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myBaseImage> --os-disk-size-gb <myDiskSize>  --admin-username myUserName --admin-password myPassword
      
    • 일반화된 VHD로 시작하는 경우:

      1. 먼저 원하는 크기의 관리되지 않는 디스크를 사용하여 VM을 만든 다음, 관리 디스크로 변환합니다.

        az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myVhdUrl> --os-type windows --os-disk-size-gb <myDiskSizeGb> --use-unmanaged-disk --admin-username <myUserName> --admin-password <myPassword> --storage-account <myVhdStorageAccount>
        
      2. VM 종료

        az vm stop --resource-group <myResourceGroup> --name <MyVM>
        
      3. VM 할당을 취소합니다.

        az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
        
      4. 관리 디스크로 변환

        az vm convert --resource-group <myResourceGroup> --name <MyVM>
        
      5. VM을 다시 시작합니다.

        az vm start --resource-group <myResourceGroup> --name <MyVM>
        
  2. 이미지를 사용자 지정하기 위해 VM의 공용 IP 주소에 대한 원격 데스크톱(또는 SSH)입니다. RDP(3389) 또는 SSH(22) 포트의 차단을 해제하려면 방화벽에서 포트를 열어야 할 수 있습니다.

    1. Windows - 128GB보다 큰 경우 <MyDiskSizeGb> OS 디스크 크기를 확장하여 지정한 <MyDiskSizeGb>디스크 크기를 채웁니다.

      DiskPart 도구를 관리자 권한으로 열고 다음 DiskPart 명령을 실행합니다.

      1. list volume (볼륨을 보려면)
      2. select volume 2 (OS 드라이브 볼륨에 따라 다름)
      3. extend size 72000 (드라이브를 128GB에서 200GB로 72GB까지 확장하려면)
  3. VM에 원하는 추가 소프트웨어를 설치합니다.

  4. 파이프라인 에이전트 사용자의 권한을 사용자 지정하려면 명명 AzDevOps된 사용자를 만들고 해당 사용자에게 필요한 권한을 부여할 수 있습니다. 이 사용자는 확장 집합 에이전트 시작 스크립트가 아직 없는 경우 만들어집니다.

  5. 사용자 지정이 완료되면 VM 다시 부팅

  6. VM을 일반화합니다.

    • Windows - 관리 콘솔 창에서:
      C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown
      
    • Linux:
      sudo waagent -deprovision+user -force
      

    Important

    VM이 일반화 및 종료를 완료할 때까지 기다립니다. VM이 중지될 때까지 진행하지 마세요. 60분 동안 허용합니다.

  7. VM 할당을 취소합니다.

    az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
    
  8. VM을 일반화됨으로 표시

    az vm generalize --resource-group <myResourceGroup> --name <MyVM>
    
  9. 일반화된 이미지를 기반으로 VM 이미지를 만듭니다. 이러한 단계를 수행하여 기존 확장 집합 이미지를 업데이트하는 경우 출력의 이미지 ID URL을 기록해 둡니다.

    az image create  --resource-group <myResourceGroup> --name <MyImage> --source <MyVM>
    
  10. 사용자 지정 VM 이미지를 기반으로 확장 집합 만들기

    az vmss create --resource-group <myResourceGroup> --name <myScaleSet> --image <MyImage> --admin-username <myUsername> --admin-password <myPassword> --instance-count 2 --disable-overprovision --upgrade-policy-mode manual --load-balancer '""'
    
  11. 확장 집합에서 만든 두 VM이 모두 온라인 상태가 되었는지, 이름이 다른지, 성공 상태에 도달했는지 확인합니다.

이제 이 확장 집합을 사용하여 에이전트 풀을 만들 준비가 되었습니다.

새 사용자 지정 이미지로 기존 확장 집합 업데이트

기존 확장 집합에서 이미지를 업데이트하려면 사용자 지정 이미지, 소프트웨어 또는 디스크 크기 섹션 az image create 이 있는 확장 집합 만들기의 단계를 수행하여 사용자 지정 OS 이미지를 생성합니다. 명령에서 출력되는 ID 속성 URL을 기록해 az image create 둡니다. 그런 다음, 다음 예제와 같이 새 이미지로 확장 집합을 업데이트합니다. 확장 집합 이미지가 업데이트되면 확장 집합의 모든 향후 VM이 새 이미지로 만들어집니다.

az vmss update --resource-group <myResourceGroup> --name <myScaleSet> --set virtualMachineProfile.storageProfile.imageReference.id=<id url>

지원되는 운영 체제

확장 집합 에이전트는 현재 Ubuntu Linux, Windows Server/DataCenter 2016/2019 및 Windows 10 클라이언트를 지원합니다.

알려진 문제

  • Debian 또는 RedHat Linux 배포판은 지원되지 않습니다. Ubuntu만 해당됩니다.
  • Windows 10 클라이언트는 파이프라인 에이전트를 로컬 사용자로 실행하는 것을 지원하지 않으므로 에이전트가 UI와 상호 작용할 수 없습니다. 에이전트는 대신 로컬 서비스로 실행됩니다.

문제 해결

Azure DevOps 프로젝트 설정으로 이동하고, 파이프라인 아래에서 에이전트 풀을 선택하고, 에이전트 풀을 선택합니다. 진단 레이블이 지정된 탭을 선택합니다.

진단 탭에는 Azure Scale Set에서 VM을 만들거나 삭제하거나 이미지로 다시 설치하기 위해 Azure DevOps에서 실행하는 모든 작업이 표시됩니다. 또한 진단은 이러한 작업을 수행하는 동안 발생한 모든 오류를 기록합니다. 오류를 검토하여 확장 집합에 확장할 충분한 리소스가 있는지 확인합니다. Azure 구독이 VM, CPU 코어, 디스크 또는 IP 주소의 리소스 제한에 도달한 경우 이러한 오류가 여기에 표시됩니다.

비정상 에이전트

에이전트 또는 가상 머신이 시작되지 않거나 Azure DevOps에 연결되지 않거나 예기치 않게 오프라인 상태가 되면 Azure DevOps는 에이전트 풀의 진단 탭에 오류를 기록하고 연결된 가상 머신을 삭제하려고 시도합니다. 네트워킹 구성, 이미지 사용자 지정 및 보류 중인 재부팅으로 인해 이러한 문제가 발생할 수 있습니다. VM에 연결하여 로그를 디버그하고 수집하면 조사에 도움이 될 수 있습니다.

Azure DevOps가 조사를 위해 비정상 에이전트 VM을 저장하고 비정상 상태를 감지할 때 자동으로 삭제하지 않도록 하려면 Azure DevOps 프로젝트 설정으로 이동하여 파이프라인에서 에이전트 풀을 선택하고 에이전트 풀을 선택합니다. 설정을 선택하고 조사를 위해 비정상 에이전트 저장 옵션을 선택하고 저장을 선택합니다.

비정상 에이전트 설정을 저장합니다.

이제 확장 집합에서 비정상 에이전트가 검색되면 Azure DevOps는 해당 에이전트 및 연결된 가상 머신을 저장합니다. 저장된 에이전트는 에이전트 풀 UI의 진단 탭에 표시됩니다. Azure DevOps 프로젝트 설정으로 이동하고, 파이프라인 아래에서 에이전트 풀을 선택하고, 에이전트 풀을 선택하고, 진단을 선택하고, 에이전트 이름을 기록해 둡니다.

저장된 에이전트 카드입니다.

Azure Portal을 통해 Azure Virtual Machine Scale Set의 인스턴스 목록에서 연결된 가상 머신을 찾습니다 .

Azure Portal Virtual Machine Scale Set 인스턴스.

인스턴스를 선택하고, 연결을 선택하고, 조사를 수행합니다.

가상 머신 인스턴스에 연결합니다.

조사를 완료할 때 저장된 에이전트를 삭제하려면 Azure DevOps 프로젝트 설정으로 이동하여 파이프라인 아래에서 에이전트 풀을 선택하고 에이전트 풀을 선택합니다. 진단 레이블이 지정된 탭을 선택합니다. 조사 카드에 저장된 에이전트에서 에이전트를 찾고 삭제를 선택합니다. 그러면 풀에서 에이전트가 제거되고 연결된 가상 머신이 삭제됩니다.

저장된 에이전트 카드 삭제 단추입니다.

FAQ

몇 가지 일반적인 문제와 해결 방법은 무엇인가요?

다양한 시간에 원하는 것보다 더 많은 유휴 에이전트를 관찰합니다.

이러한 현상이 발생하는 이유를 더 잘 이해하려면 Azure Pipelines가 확장 집합을 관리하는 방법을 참조하세요. 크기 조정 작업 전체에서 Azure Pipelines의 목표는 대기 중인 유휴 에이전트의 원하는 수에 도달하는 것입니다. 풀은 천천히 스케일 아웃 및 스케일 인됩니다. 하루 동안 풀은 아침에 요청이 큐에 있으면 스케일 아웃되고 저녁에 로드가 줄어들면 스케일 인됩니다. 이는 Azure Pipelines가 사용자가 지정하는 제약 조건으로 점진적으로 수렴될 때 예상되는 동작입니다.

Virtual Machine Scale Sets 스케일 업은 예상 5분 간격으로 발생하지 않습니다.

조정 작업은 5분마다 실행되지만 하나의 작업만 처리되는 경우 5분 이내에 스케일 업이 발생하지 않는 것을 관찰할 수 있습니다. 이는 현재 의도적으로 설계된 것입니다.

Azure DevOps Linux VM 확장 집합이 파이프라인을 시작하지 못하는 경우가 많습니다.

확장 집합 에이전트에 문제가 발생할 때 가장 먼저 살펴볼 곳은 에이전트 풀의 진단 탭입니다.

또한 디버깅 목적으로 비정상 VM을 저장하는 것이 좋습니다. 자세한 내용은 비정상 에이전트를 참조하세요.

저장된 에이전트는 삭제하지 않는 한 존재합니다. 에이전트가 10분 안에 온라인 상태가 되지 않으면 비정상으로 표시되고 가능한 경우 저장됩니다. 하나의 VM만 저장된 상태로 유지됩니다. 에이전트가 예기치 않게 오프라인 상태가 되면(VM 재부팅 또는 이미지에 문제가 발생함) 조사를 위해 저장되지 않습니다.

에이전트가 시작되지 않는 VM만 저장됩니다. VM을 만드는 동안 실패한 상태가 있으면 저장되지 않습니다. 이 경우 진단 탭의 메시지는 "시작 실패" 대신 "비정상 컴퓨터 삭제"입니다.

에이전트 풀을 사용할 때마다 가상 머신을 자동으로 중단하는 옵션을 확인하지만 VM이 예상대로 다시 이미징되지 않고 대기 중인 새 작업을 선택하기만 하면 됩니다.

각 빌드 후 VM을 해체하는 옵션은 Windows Server 및 지원되는 Linux 이미지에서만 작동합니다. Windows 클라이언트 이미지에는 지원되지 않습니다.

VM이 다시 시작되는 경우 Virtual Machine Scale Sets는 에이전트를 오프라인으로 표시합니다.

VM이 다시 시작되는 경우 에이전트를 오프라인으로 표시하는 것이 예상되는 동작입니다. 에이전트 서비스는 시스템화된 컨텍스트에서만 실행됩니다. 그러나 어떤 이유로 컴퓨터가 다시 시작되면 비정상 VM으로 간주되어 삭제됩니다. 자세한 내용은 비정상 에이전트를 참조하세요.

에이전트 또는 가상 머신을 시작하지 못하거나, Azure DevOps에 연결할 수 없거나, 예기치 않게 오프라인으로 전환할 수 없는 경우 Azure DevOps는 에이전트 풀의 진단 탭에 오류를 기록하고 연결된 가상 머신을 삭제하려고 시도합니다. 네트워킹 구성, 이미지 사용자 지정 및 보류 중인 재부팅으로 인해 이러한 문제가 발생할 수 있습니다. 이 문제를 방지하려면 이미지에서 소프트웨어 업데이트를 사용하지 않도록 설정합니다. VM에 연결하여 문제를 조사할 수 있도록 하는 로그를 디버깅하고 수집할 수도 있습니다.

비용 관리에서 Virtual Machine Scale Sets에 대한 _AzureDevOpsElasticPoolTimeStamp 같은 여러 태그를 볼 수 있습니다.

풀이 만들어지면 태그가 확장 집합에 추가되어 확장 집합을 사용 중인 것으로 표시하여 동일한 확장 집합을 사용하는 두 개의 풀을 방지하고, 구성 작업이 실행될 때마다 업데이트되는 타임스탬프에 다른 태그가 추가됩니다(2시간마다).

새 확장 집합 에이전트 풀을 만들고 이름이 같은 풀이 이미 있다는 오류 메시지를 받을 수 없습니다.

태그가 삭제된 후에도 확장 집합에 계속 존재하기 때문에 오류 This virtual machine scale set is already in use by pool <pool name> 메시지가 표시될 수 있습니다. 에이전트 풀이 삭제되면 확장 집합에서 태그를 삭제하려고 하지만 이는 최선의 시도이며 세 번의 재시도 후 포기합니다. 또한 에이전트 풀에서 사용하지 않는 Virtual Machine Scale Set을 새 풀에 할당할 수 없는 최대 2시간 간격이 있을 수 있습니다. 이에 대한 수정은 해당 시간 간격이 경과할 때까지 기다리거나 Azure Portal에서 확장 집합에 대한 태그를 수동으로 삭제하는 것입니다. Azure Portal에서 확장 집합을 볼 때 왼쪽의 태그 링크를 선택하고 _AzureDevOpsElasticPool 레이블이 지정된 태그를 삭제합니다.

Virtual Machine Scale Sets 유지 관리 작업이 에이전트에서 실행되거나 로그를 가져오지 않음

유지 관리 작업은 24시간마다 한 번씩 실행됩니다. 이 시간 전에 VM이 채워질 수 있습니다. VM에서 디스크 크기를 늘리고 파이프라인에 스크립트를 추가하여 콘텐츠를 삭제하는 것이 좋습니다.

Virtual Machine Scale Sets에 대한 스크립트에서 기본 관리자로 지정 AzDevOps 하는 경우 확장 집합 인스턴스의 에이전트 구성과 관련된 문제를 관찰할 수 있습니다.

Virtual Machine Scale Set에 대한 스크립트에서 기본 관리자로 지정 AzDevOps 하는 경우 확장 집합 인스턴스에서 에이전트 구성과 관련된 문제가 발생할 수 있습니다(사용자의 암호가 이미 있는 경우 변경됨).

이 문제는 에이전트 확장 스크립트가 사용자를 AzDevOps 만들고 암호를 변경하려고 하기 때문에 발생합니다.

참고 항목

사용자를 만들고 추가 권한을 부여해도 되지만 기본 관리자가 아니어야 하며 암호가 변경되므로 암호에 의존해서는 안 됩니다. 이 문제를 방지하려면 확장 집합 AzDevOps을 만들 때 대신 다른 사용자를 기본 관리자로 선택합니다.

네트워크 보안 및 방화벽 구성으로 인해 확장 집합 인스턴스에서 에이전트 확장 설치 실패

확장은 https://vstsagentpackage.azureedge.net/agent 에서 빌드 에이전트 파일을 다운로드할 수 있어야 하며 빌드 에이전트는 Azure DevOps Services에 등록할 수 있어야 합니다. 이 URL과 Azure DevOps Services 관련 IP 및 URL이 인스턴스에서 열려 있는지 확인합니다. 방화벽에서 차단을 해제해야 하는 IP 및 URL은 허용된 IP 주소 및 도메인 URL을 참조하세요.

확장 집합 에이전트 구성 스크립트가 Add-MpPreference를 호출하고 에이전트에서 Windows Defender를 구성하는 이유는 무엇인가요?

성능 및 안정성을 향상시키기 위해 구성 스크립트는 포함 및 추가 MpPreference ExclusionPathC:\ 호출합니다D:\. 그러면 에이전트의 이러한 폴더에 있는 파일에 대한 Windows Defender 예약 및 실시간 검색을 사용하지 않도록 설정합니다. 기본 동작을 변경하려면 환경 변수를 로 ELASTIC_POOLS_SKIP_DEFENDER_EXCLUSION true설정합니다.

풀 크기를 늘리고 싶습니다. 무엇을 고려해야 하나요?

풀의 크기를 늘리기 전에 Virtual Machine Scale Sets 풀에 대해 구성된 Azure Virtual Network에 모든 새 에이전트를 수용할 수 있는 충분한 주소 공간 범위가 있는지 확인합니다. 그렇지 않은 경우 용량을 늘리지 못한 것과 유사한 오류가 발생할 수 있습니다. 주소 접두사가 12.123.45.224/28인 서브넷 azure-devops-agent-pool-fabrikam-fiber에는 5개의 IP 주소에 대한 충분한 용량이 없습니다.