Condividi tramite


Agenti del set di scalabilità di macchine virtuali di Azure

Servizi di Azure DevOps

Gli agenti del set di scalabilità di macchine virtuali di Azure, definiti agenti del set di scalabilità, sono una forma di agenti self-hosted che possono essere ridimensionati automaticamente per soddisfare le esigenze. Questa elasticità riduce la necessità di eseguire sempre agenti dedicati. A differenza degli agenti ospitati da Microsoft, è possibile scegliere in modo flessibile le dimensioni e l'immagine dei computer in cui vengono eseguiti gli agenti.

Suggerimento

I pool devOps gestiti sono un nuovo servizio che rappresenta un'evoluzione dei pool di agenti del set di scalabilità di macchine virtuali di Azure DevOps, semplificando ulteriormente la creazione di pool personalizzati, migliorando la scalabilità e l'affidabilità dei pool personalizzati. I pool DevOps gestiti sono un servizio completamente gestito in cui le macchine virtuali o i contenitori che alimentano gli agenti risiedono in una sottoscrizione di Microsoft Azure e non nella propria sottoscrizione di Azure, ad esempio quando si usano i pool di agenti del set di scalabilità di macchine virtuali di Azure DevOps. Per altre informazioni, vedere la documentazione relativa ai pool devOps gestiti.

Se si desiderano agenti ospitati da Microsoft, ma sono limitati da ciò che offrono, è consigliabile prendere in considerazione gli agenti del set di scalabilità. Di seguito sono riportati alcuni esempi.

  • Sono necessari più memoria, più processori, più risorse di archiviazione o più operazioni di I/O rispetto a quanto offerto negli agenti ospitati da Microsoft nativi.
  • È necessaria una macchina virtuale NCv2 con set di istruzioni specifici per l'apprendimento automatico.
  • È necessario eseguire la distribuzione in un Servizio app di Azure privato all'interno di una rete virtuale privata senza connettività in ingresso.
  • È necessario aprire il firewall aziendale a indirizzi IP specifici in modo che gli agenti ospitati da Microsoft possano comunicare con i server.
  • È necessario limitare la connettività di rete dei computer agente e consentire loro di raggiungere solo i siti approvati.
  • Non è possibile ottenere da Microsoft un numero di agenti sufficienti a soddisfare le proprie esigenze.
  • I processi superano il timeout dell'agente ospitato in Microsoft.
  • Non è possibile partizionare processi paralleli ospitati da Microsoft in singoli progetti o team dell'organizzazione.
  • Si vuole eseguire più processi consecutivi all'interno di un agente per sfruttare le cache incrementali delle origini e dei pacchetti a livello di computer.
  • Si vuole eseguire la configurazione o il riscaldamento della cache prima che un agente inizi ad accettare i processi.

Se si vogliono agenti self-hosted ma si vuole semplificare la gestione, è consigliabile prendere in considerazione gli agenti del set di scalabilità. Di seguito sono riportati alcuni esempi.

  • Si vuole evitare di eseguire di continuo agenti dedicati. Si vuole effettuare il deprovisioning dei computer agente che non vengono usati per eseguire processi.
  • Si esegue un codice non attendibile all'interno della pipeline e si vuole ricreare l'immagine dei computer dell'agente al termine di ogni processo.
  • Si vuole semplificare l'aggiornamento periodico dell'immagine di base per gli agenti.

Nota

  • Non è possibile eseguire agenti Mac usando set di scalabilità. In questo modo è possibile eseguire solo agenti Windows o Linux.

  • L'uso di pool di agenti set di scalabilità di macchine virtuali per Azure DevOps Services è supportato solo per il cloud pubblico di Azure (servizio globale). Attualmente, i pool di agenti set di scalabilità di macchine virtuali non supportano altre offerte cloud nazionali.

  • Non è consigliabile associare un set di scalabilità di macchine virtuali a più pool.

Creare il set di scalabilità

In preparazione alla creazione di agenti del set di scalabilità, è prima necessario creare un set di scalabilità di macchine virtuali nel portale di Azure. È necessario creare il set di scalabilità di macchine virtuali in modo che Azure Pipelines possa gestirlo. In particolare, è necessario disabilitare la scalabilità automatica in modo che Azure Pipelines possa determinare come eseguire il ridimensionamento in base al numero di processi della pipeline in ingresso. Per creare il set di scalabilità, è consigliabile usare la procedura seguente.

Nell'esempio seguente viene creato un nuovo gruppo di risorse e un set di scalabilità di macchine virtuali con Azure Cloud Shell usando l'immagine della macchina virtuale UbuntuLTS.

Nota

In questo esempio viene usata l'immagine della macchina virtuale UbuntuLTS per il set di scalabilità. Se è necessaria un'immagine di macchina virtuale personalizzata come base per l'agente, creare l'immagine personalizzata prima di creare il set di scalabilità seguendo la procedura descritta in Creare un set di scalabilità con immagini, software o dimensioni del disco personalizzate.

  1. Passare ad Azure Cloud Shell all'indirizzo https://shell.azure.com/.

  2. Eseguire il comando seguente per verificare la sottoscrizione di Azure predefinita.

    az account list -o table
    

    Se la sottoscrizione desiderata non è elencata come predefinita, selezionare la sottoscrizione desiderata.

    az account set -s <your subscription ID>
    
  3. Creare un gruppo di risorse per il set di scalabilità di macchine virtuali.

    az group create \
    --location westus \
    --name vmssagents
    
  4. Creare un set di scalabilità di macchine virtuali nel gruppo di risorse. In questo esempio viene specificata l'immagine della macchina virtuale Ubuntu2204.

    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
    

    Nota

    Azure Pipelines non supporta il provisioning e la scalabilità automatica dei set di scalabilità. Assicurarsi che entrambe le funzionalità siano disabilitate per il set di scalabilità.

    Poiché Azure Pipelines gestisce il set di scalabilità, sono necessarie o consigliate le impostazioni seguenti:

    • --disable-overprovision -Obbligatorio
    • --upgrade-policy-mode manual -Obbligatorio
    • --load-balancer "" - Azure Pipelines non richiede un servizio di bilanciamento del carico per instradare i processi agli agenti nel pool di agenti del set di scalabilità, ma la configurazione di un servizio di bilanciamento del carico è un modo per ottenere un indirizzo IP per gli agenti del set di scalabilità che è possibile usare per le regole del firewall. Un'altra opzione per ottenere un indirizzo IP per gli agenti del set di scalabilità consiste nel creare il set di scalabilità usando le --public-ip-address opzioni. Per altre informazioni sulla configurazione del set di scalabilità con un servizio di bilanciamento del carico o un indirizzo IP pubblico, vedere la documentazione di set di scalabilità di macchine virtuali e az vmss create.
    • --instance-count 2 - Questa impostazione non è necessaria, ma offre la possibilità di verificare che il set di scalabilità sia completamente funzionante prima di creare un pool di agenti. La creazione delle due macchine virtuali può richiedere alcuni minuti. Successivamente, quando si crea il pool di agenti, Azure Pipelines elimina queste due macchine virtuali e ne crea di nuove.

    Importante

    Se si esegue questo script usando l'interfaccia "" della riga di comando di Azure in Windows, è necessario racchiudere in --load-balancer "" con virgolette singole come illustrato di seguito: --load-balancer '""'

    Se le dimensioni della macchina virtuale supportano dischi temporanei del sistema operativo, i parametri seguenti per abilitare i dischi del sistema operativo temporaneo sono facoltativi, ma è consigliabile migliorare i tempi di ricreazione dell'immagine della macchina virtuale.

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

    Importante

    I dischi temporanei del sistema operativo non sono supportati in tutte le dimensioni delle macchine virtuali. Per un elenco delle dimensioni di vm supportate, vedere Dischi temporanei del sistema operativo per le macchine virtuali di Azure.

    Selezionare qualsiasi immagine Linux o Windows, da Azure Marketplace o dall'immagine personalizzata, per creare il set di scalabilità. Non preinstalla l'agente di Azure Pipelines nell'immagine. Azure Pipelines installa automaticamente l'agente durante il provisioning di nuove macchine virtuali. Nell'esempio precedente è stata usata un'immagine normale UbuntuLTS . Per istruzioni sulla creazione e l'uso di un'immagine personalizzata, vedere Domande frequenti.

    Selezionare qualsiasi SKU di macchina virtuale e SKU di archiviazione.

    Nota

    Le considerazioni sulle licenze limitano la distribuzione di immagini ospitate da Microsoft. Non è possibile fornire queste immagini per l'uso negli agenti del set di scalabilità. Tuttavia, gli script usati per generare queste immagini sono open source. È possibile usare questi script e creare immagini personalizzate.

  5. Dopo aver creato il set di scalabilità, passare al set di scalabilità nel portale di Azure e verificare le impostazioni seguenti:

    • Criteri di aggiornamento - Manuale

      Verificare i criteri di aggiornamento.

      È anche possibile verificare questa impostazione eseguendo il comando dell'interfaccia della riga di comando di Azure seguente.

      az vmss show --resource-group vmssagents --name vmssagentspool --output table
      
      Name            ResourceGroup    Location    Zones    Capacity    Overprovision    UpgradePolicy
      --------------  ---------------  ----------  -------  ----------  ---------------  ---------------
      vmssagentspool  vmssagents       westus               0           False            Manual
      
    • Ridimensionamento - Scalabilità manuale

      Verificare i criteri di scalabilità manuale.

Importante

Azure Pipelines non supporta la protezione delle istanze. Assicurarsi che le misure di protezione delle istanze del set di scalabilità e del set di scalabilità siano disabilitate.

Modalità di orchestrazione

I set di scalabilità di macchine virtuali di Azure possono essere configurati con due modalità di orchestrazione: Uniform e Flessibile. Il supporto di Azure Pipelines per la modalità di orchestrazione uniforme è disponibile a livello generale per tutti i clienti.

La modalità di orchestrazione flessibile consente ad Azure Pipelines di accodare più operazioni del set di scalabilità in parallelo. Il supporto di Azure Pipelines per l'orchestrazione flessibile è disponibile su richiesta ed è soggetto alla valutazione. I modelli di utilizzo dei clienti devono indicare un vantaggio significativo. Tali clienti dispongono di set di scalabilità di grandi dimensioni, non riutilizzano gli agenti per più processi, eseguono più processi di breve durata in parallelo e usano esclusivamente dischi temporanei nelle macchine virtuali. Per usare questa funzionalità, contattare il team di supporto.

Creare il pool di agenti del set di scalabilità

  1. Passare alle impostazioni del progetto Azure DevOps, selezionare Pool di agenti in Pipeline e selezionare Aggiungi pool per creare un nuovo pool di agenti.

    Creare un pool di agenti.

    Importante

    È possibile creare il pool di set di scalabilità in Impostazioni progetto o Impostazioni organizzazione, ma quando si elimina un pool di set di scalabilità, è necessario eliminarlo dalle impostazioni organizzazione e non dalle impostazioni di Project.

  2. Selezionare Set di scalabilità di macchine virtuali di Azure per il tipo di pool. Selezionare la sottoscrizione di Azure che contiene il set di scalabilità, scegliere Autorizza e scegliere il set di scalabilità di macchine virtuali desiderato da tale sottoscrizione. Se si dispone di una connessione al servizio esistente , è possibile scegliere tale connessione dall'elenco anziché dalla sottoscrizione.

    Importante

    • Per configurare un pool di agenti del set di scalabilità, è necessario disporre delle autorizzazioni Proprietario o Amministratore accesso utenti per la sottoscrizione selezionata. Se si dispone di una di queste autorizzazioni ma si riceve un errore quando si sceglie Autorizza, vedere Risoluzione dei problemi.

    • L'unica connessione al servizio attualmente supportata è una connessione al servizio Azure Resource Manager (ARM) basata su una chiave dell'entità servizio. Le connessioni al servizio ARM basate su credenziali del certificato o su un'identità gestita avranno esito negativo. Quando si tenta di elencare i set di scalabilità esistenti nella sottoscrizione, verrà visualizzato un errore simile al seguente:

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

  3. Scegliere il set di scalabilità di macchine virtuali desiderato da tale sottoscrizione.

  4. Specificare un nome per il pool di agenti.

  5. Configura le opzioni seguenti:

    • Rimuovere automaticamente le macchine virtuali dopo ogni uso : viene usata una nuova istanza di macchina virtuale per ogni processo. La macchina virtuale passa offline dopo l'esecuzione di un processo e viene ricreata l'immagine prima di raccogliere un altro processo.
    • Salvare un agente non integro per l'analisi : se salvare le macchine virtuali dell'agente non integro per la risoluzione dei problemi anziché eliminarle.
    • Numero massimo di macchine virtuali nel set di scalabilità: Azure Pipelines aumenta automaticamente il numero di agenti, ma non supererà questo limite.
    • Numero di agenti da mantenere in standby : Azure Pipelines ridimensiona automaticamente il numero di agenti, ma garantisce che siano sempre disponibili molti agenti per l'esecuzione di nuovi processi. Se si imposta Il numero di agenti da mantenere in standby su 0, ad esempio per risparmiare sui costi per un volume ridotto di processi, Azure Pipelines avvierà una macchina virtuale solo quando ha un processo.
    • Ritardo in minuti prima dell'eliminazione di agenti inattive in eccesso: per tenere conto della variabilità nel carico di compilazione durante il giorno, Azure Pipelines attenderà la durata specificata prima di eliminare un agente inattiva in eccesso.
    • Configurare le macchine virtuali per l'esecuzione di test interattivi (solo sistema operativo Windows Server): gli agenti Windows possono essere configurati per l'esecuzione senza rilevamento automatico con l'accesso automatico e con l'interfaccia utente interattiva oppure possono essere configurati per l'esecuzione con autorizzazioni elevate. Selezionare questa casella per eseguire unelevated con l'interfaccia utente interattiva. In entrambi i casi, l'utente dell'agente è membro del gruppo Administrators.
  6. Quando le impostazioni sono configurate, scegliere Crea per creare il pool di agenti.

Usare il pool di agenti del set di scalabilità

L'uso di un pool di agenti del set di scalabilità è simile a qualsiasi altro pool di agenti. È possibile usarlo nelle pipeline di compilazione, rilascio o YAML classiche. Le autorizzazioni utente, le autorizzazioni della pipeline, le approvazioni e altri controlli funzionano allo stesso modo di qualsiasi altro pool di agenti. Per altre informazioni, vedere Pool di agenti.

Importante

È necessario prestare attenzione quando si apportano modifiche direttamente al set di scalabilità nel portale di Azure.

  • Non è possibile modificare molte delle impostazioni di configurazione del set di scalabilità nella portale di Azure. Azure Pipelines aggiorna la configurazione del set di scalabilità. Eventuali modifiche manuali apportate al set di scalabilità possono interferire con il funzionamento di Azure Pipelines.
  • Non è possibile rinominare o eliminare un set di scalabilità senza prima eliminare il pool del set di scalabilità in Azure Pipelines.

Come Azure Pipelines gestisce il set di scalabilità

Dopo aver creato il pool di agenti del set di scalabilità, Azure Pipelines ridimensiona automaticamente i computer dell'agente.

Azure Pipelines esegue l'esempio dello stato degli agenti nel pool e nelle macchine virtuali nel set di scalabilità ogni 5 minuti. La decisione di aumentare o ridurre le istanze si basa sul numero di agenti inattive in quel momento. Un agente viene considerato inattiva se è online e non esegue un processo della pipeline. Azure Pipelines esegue un'operazione di scalabilità orizzontale se viene soddisfatta una delle condizioni seguenti:

  • Il numero di agenti inattivi è inferiore al numero di agenti di standby specificati
  • Non sono presenti agenti inattive per i processi della pipeline di servizio in attesa nella coda

Se viene soddisfatta una di queste condizioni, Azure Pipelines aumenta il numero di macchine virtuali. La scalabilità orizzontale viene eseguita in incrementi di una determinata percentuale delle dimensioni massime del pool. Attendere 20 minuti per la creazione dei computer per ogni passaggio.

Azure Pipelines viene ridimensionato negli agenti quando il numero di agenti inattivi supera il numero di standby per più di 30 minuti (configurabile usando Ritardo in minuti prima di eliminare agenti inattivi in eccesso).

Per inserire tutto questo in un esempio, si consideri un pool di agenti del set di scalabilità configurato con due agenti di standby e quattro agenti massimi. Si supponga di voler eliminare la macchina virtuale dopo ogni uso. Si supponga inoltre che nel set di scalabilità non siano presenti macchine virtuali da cui iniziare.

  • Poiché il numero di agenti inattive è 0 e poiché il numero di agenti inattive è inferiore al numero di standby di 2, Azure Pipelines aumenta e aggiunge due macchine virtuali al set di scalabilità. Una volta che questi agenti sono online, ci saranno due agenti inattive.

  • Si supponga che un processo della pipeline arrivi e venga allocato a uno degli agenti.

  • Al momento, il numero di agenti inattive è 1 e minore del numero di standby pari a 2. Azure Pipelines aumenta quindi il numero di istanze e aggiunge altre 2 macchine virtuali (le dimensioni di incremento usate in questo esempio). Al momento, il pool ha tre agenti inattive e un agente occupato.

  • Diciamo che il processo sul primo agente viene completato. Azure Pipelines porta offline l'agente per la ricreazione dell'immagine del computer. Dopo alcuni minuti, torna con una nuova immagine. A questo punto, avremo quattro agenti inattive.

  • Se non arrivano altri processi per 30 minuti (configurabile usando Ritardo in minuti prima di eliminare agenti inattivi in eccesso), Azure Pipelines determina che sono presenti più agenti inattivi del necessario. Viene quindi ridimensionato nel pool a due agenti.

Durante questa operazione, l'obiettivo di Azure Pipelines è raggiungere il numero desiderato di agenti inattive in standby. Il numero di istanze del pool viene aumentato e ridotto lentamente. Nel corso di un giorno, il pool verrà ridimensionato man mano che le richieste vengono accodate al mattino e ridimensionate man mano che il carico diminuisce la sera. È possibile osservare più agenti inattivi rispetto al desiderio in diversi momenti, che è previsto quando Azure Pipelines converge gradualmente ai vincoli specificati.

Nota

L'aumento o la scalabilità orizzontale delle macchine virtuali da parte di Azure Pipelines può richiedere un'ora o più. Azure Pipelines aumenta il numero di istanze nei passaggi, monitora le operazioni per individuare gli errori e reagisce eliminando i computer inutilizzabili e creando nuovi nel corso del tempo. Questa operazione correttiva può richiedere più di un'ora.

Per ottenere la massima stabilità, le operazioni del set di scalabilità vengono eseguite in sequenza. Ad esempio, se il pool deve aumentare il numero di istanze e sono presenti anche computer non integri da eliminare, Azure Pipelines aumenta prima il numero di istanze del pool. Dopo che il pool è stato ridimensionato per raggiungere il numero desiderato di agenti inattive in standby, i computer non integri verranno eliminati, a seconda dell'impostazione Salva un agente non integro per l'analisi . Per altre informazioni, vedere Agenti non integri.

A causa delle dimensioni di campionamento di 5 minuti, è possibile che tutti gli agenti possano eseguire pipeline per un breve periodo di tempo e non si verificherà alcuna scalabilità orizzontale.

Personalizzazione della configurazione dell'agente della pipeline

È possibile personalizzare la configurazione dell'agente di Azure Pipelines definendo le variabili di ambiente nell'immagine personalizzata del sistema operativo per il set di scalabilità. Ad esempio, la directory di lavoro dell'agente del set di scalabilità è C:\a per Windows e /agent/_work per Linux. Per modificare la directory di lavoro, impostare una variabile di ambiente denominata VSTS_AGENT_INPUT_WORK con la directory di lavoro desiderata. Altre informazioni sono disponibili nella documentazione sulla configurazione automatica dell'agente Pipelines. Alcuni esempi includono:

  • VSTS_AGENT_INPUT_WORK
  • VSTS_AGENT_INPUT_PROXYURL
  • VSTS_AGENT_INPUT_PROXYUSERNAME
  • VSTS_AGENT_INPUT_PROXYPASSWORD

Importante

È necessario prestare attenzione quando si personalizza l'agente Pipelines. Alcune impostazioni sono in conflitto con altre impostazioni necessarie, causando l'errore di registrazione dell'agente e l'eliminazione della macchina virtuale. Queste impostazioni non devono essere impostate o modificate:

  • 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
  • ... e qualsiasi elemento correlato ai gruppi di distribuzione.

Personalizzazione dell'avvio della macchina virtuale tramite l'estensione script personalizzata

Gli utenti possono voler eseguire script di avvio nei computer dell'agente del set di scalabilità prima che tali computer avviino i processi della pipeline. Alcuni casi d'uso comuni per gli script di avvio includono l'installazione di software, cache di riscaldamento o il recupero di repository. È possibile eseguire script di avvio installando l'estensione script personalizzata per Windows o l'estensione script personalizzata per Linux.

Questa estensione verrà eseguita in ogni macchina virtuale del set di scalabilità subito dopo la creazione o la ricreazione dell'immagine. L'estensione script personalizzata verrà eseguita prima dell'esecuzione dell'estensione dell'agente di Azure Pipelines.

Ecco un esempio per creare un'estensione di script personalizzata per 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 \" }'

Ecco un esempio per creare un'estensione di script personalizzata per 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 \" }'

Importante

Gli script eseguiti nell'estensione script personalizzata devono restituire con il codice di uscita 0 per consentire alla macchina virtuale di completare il processo di creazione della macchina virtuale. Se l'estensione script personalizzata genera un'eccezione o restituisce un codice di uscita diverso da zero, l'estensione Azure Pipeline non verrà eseguita e la macchina virtuale non verrà registrata con il pool di agenti di Azure DevOps.

Potrebbe verificarsi che l'estensione venga eseguita prima del provisioning di tutte le risorse della macchina virtuale, nel qual caso verrà visualizzato un errore simile a "Non è stato possibile installare i prerequisiti di base". È possibile risolvere questo problema aggiungendo un sleep comando all'inizio dello script, sleep 30ad esempio .

Ciclo di vita di un agente del set di scalabilità

Ecco il flusso di operazioni per un agente del set di scalabilità di macchine virtuali di Azure Pipelines

  1. Il processo di dimensionamento del pool di agenti del set di scalabilità di Azure DevOps determina che il pool ha un numero eccessivo di agenti inattive e deve aumentare il numero di istanze. Azure Pipelines effettua una chiamata ai set di scalabilità di Azure per aumentare la capacità del set di scalabilità.

  2. Il set di scalabilità di Azure inizia a creare le nuove macchine virtuali. Quando le macchine virtuali sono in esecuzione, i set di scalabilità di Azure eseguono in sequenza tutte le estensioni di macchina virtuale installate.

  3. Se l'estensione script personalizzata è installata, viene eseguita prima dell'estensione dell'agente di Azure Pipelines. Se l'estensione dello script personalizzato restituisce un codice di uscita diverso da zero, il processo di creazione della macchina virtuale viene interrotto e verrà eliminato.

  4. Viene eseguita l'estensione Dell'agente di Azure Pipelines. Questa estensione scarica la versione più recente dell'agente di Azure Pipelines insieme alla versione più recente dello script di configurazione. Gli script di configurazione sono disponibili in URL con i formati seguenti:

    • Linux: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Linux/<script_version>/enableagent.sh, ad esempio, versione 15
    • Windows: https://vstsagenttools.blob.core.windows.net/tools/ElasticPools/Windows/<script_version>/enableagent.ps1, ad esempio, versione 17
  5. Lo script di configurazione crea un utente locale denominato AzDevOps se il sistema operativo è Windows Server o Linux. Per il sistema operativo client Windows 10, l'agente viene eseguito come LocalSystem. Lo script decomprime, installa e configura l'agente di Azure Pipelines. Nell'ambito della configurazione, l'agente viene registrato con il pool di agenti di Azure DevOps e viene visualizzato nell'elenco pool di agenti nello stato Offline.

  6. Per la maggior parte degli scenari, lo script di configurazione avvia immediatamente l'agente per l'esecuzione come utente AzDevOpslocale. L'agente passa online ed è pronto per eseguire i processi della pipeline.

    Se il pool è configurato per l'interfaccia utente interattiva, la macchina virtuale viene riavviata dopo la configurazione dell'agente. Dopo il riavvio, l'utente locale accede automaticamente all'agente e le pipeline vengono avviati. L'agente passa quindi online ed è pronto per eseguire i processi della pipeline.

Creare un set di scalabilità con immagini, software o dimensioni del disco personalizzate

Se si vuole solo creare un set di scalabilità con il disco del sistema operativo predefinito da 128 GB usando un'immagine di Azure disponibile pubblicamente, passare direttamente al passaggio 10 e usare il nome dell'immagine pubblica (UbuntuLTS, Win2019DataCenter e così via) per creare il set di scalabilità. In caso contrario, seguire questa procedura per personalizzare l'immagine della macchina virtuale.

  1. Creare una macchina virtuale con l'immagine del sistema operativo desiderata ed espandere facoltativamente le dimensioni del disco del sistema operativo da 128 GB a <myDiskSizeGb>.

    • Se si inizia con un'immagine di Azure disponibile, ad esempio <myBaseImage> = (Win2019DataCenter, UbuntuLTS):

      az vm create --resource-group <myResourceGroup> --name <MyVM> --image <myBaseImage> --os-disk-size-gb <myDiskSize>  --admin-username myUserName --admin-password myPassword
      
    • Se inizia con un disco rigido virtuale generalizzato:

      1. Creare prima di tutto la macchina virtuale con un disco non gestito delle dimensioni desiderate e quindi eseguire la conversione in un disco gestito:

        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. Arrestare la macchina virtuale

        az vm stop --resource-group <myResourceGroup> --name <MyVM>
        
      3. Deallocare la VM

        az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
        
      4. Eseguire la conversione in un disco gestito

        az vm convert --resource-group <myResourceGroup> --name <MyVM>
        
      5. Riavviare la VM

        az vm start --resource-group <myResourceGroup> --name <MyVM>
        
  2. Desktop remoto (o SSH) all'indirizzo IP pubblico della macchina virtuale per personalizzare l'immagine. Potrebbe essere necessario aprire le porte nel firewall per sbloccare le porte RDP (3389) o SSH (22).

    1. Windows : se <MyDiskSizeGb> è maggiore di 128 GB, estendere le dimensioni del disco del sistema operativo per riempire le dimensioni del disco specificate da <MyDiskSizeGb>.

      Aprire lo strumento DiskPart come amministratore ed eseguire questi comandi DiskPart:

      1. list volume (per visualizzare i volumi)
      2. select volume 2 (dipende da quale volume è l'unità del sistema operativo)
      3. extend size 72000 (per estendere l'unità di 72 GB, da 128 GB a 200 GB)
  3. Installare qualsiasi software aggiuntivo desiderato nella macchina virtuale.

  4. Per personalizzare le autorizzazioni dell'utente dell'agente pipeline, è possibile creare un utente denominato AzDevOpse concedere all'utente le autorizzazioni necessarie. Questo utente verrà creato dallo script di avvio dell'agente scaleset, se non esiste già.

  5. Riavviare la macchina virtuale al termine delle personalizzazioni

  6. Generalizzare la macchina virtuale.

    • Windows - Da una finestra della console di amministrazione:
      C:\Windows\System32\sysprep\sysprep.exe /generalize /oobe /shutdown
      
    • Linux:
      sudo waagent -deprovision+user -force
      

    Importante

    Attendere che la macchina virtuale finisca la generalizzazione e l'arresto. Non procedere fino a quando la macchina virtuale non è stata arrestata. Consenti 60 minuti.

  7. Deallocare la VM

    az vm deallocate --resource-group <myResourceGroup> --name <MyVM>
    
  8. Contrassegnare la macchina virtuale come generalizzata

    az vm generalize --resource-group <myResourceGroup> --name <MyVM>
    
  9. Creare un'immagine di macchina virtuale basata sull'immagine generalizzata. Quando si eseguono questi passaggi per aggiornare un'immagine del set di scalabilità esistente, prendere nota dell'URL dell'ID immagine nell'output.

    az image create  --resource-group <myResourceGroup> --name <MyImage> --source <MyVM>
    
  10. Creare il set di scalabilità in base all'immagine di macchina virtuale personalizzata

    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. Verificare che entrambe le macchine virtuali create nel set di scalabilità siano online, abbiano nomi diversi e raggiungano lo stato Succeeded

È ora possibile creare un pool di agenti usando questo set di scalabilità.

Aggiornare un set di scalabilità esistente con una nuova immagine personalizzata

Per aggiornare l'immagine in un set di scalabilità esistente, seguire la procedura descritta nella sezione precedente Creare un set di scalabilità con immagini personalizzate, software o dimensioni del disco fino az image create al passaggio per generare l'immagine del sistema operativo personalizzata. Prendere nota dell'URL della proprietà ID restituito dal az image create comando . Aggiornare quindi il set di scalabilità con la nuova immagine, come illustrato nell'esempio seguente. Dopo l'aggiornamento dell'immagine del set di scalabilità, tutte le macchine virtuali future nel set di scalabilità verranno create con la nuova immagine.

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

Sistemi operativi supportati

Gli agenti del set di scalabilità supportano attualmente Ubuntu Linux, Windows Server/DataCenter 2016/2019 e il client Windows 10.

Problemi noti

  • Le distribuzioni Debian o RedHat linux non sono supportate. Solo Ubuntu è.
  • Il client Windows 10 non supporta l'esecuzione dell'agente pipeline come utente locale e pertanto l'agente non può interagire con l'interfaccia utente. L'agente verrà invece eseguito come servizio locale.

Risoluzione dei problemi

Passare alle impostazioni del progetto Azure DevOps, selezionare Pool di agenti in Pipeline e selezionare il pool di agenti. Selezionare la scheda Diagnostica.

La scheda Diagnostica mostra tutte le azioni eseguite da Azure DevOps per creare, eliminare o ricreare le macchine virtuali nel set di scalabilità di Azure. La diagnostica registra anche eventuali errori riscontrati durante il tentativo di eseguire queste azioni. Esaminare gli errori per assicurarsi che il set di scalabilità disponga di risorse sufficienti per aumentare il numero di istanze. Se la sottoscrizione di Azure ha raggiunto il limite di risorse nelle macchine virtuali, nei core CPU, nei dischi o negli indirizzi IP, tali errori verranno visualizzati qui.

Agenti non integri

Quando gli agenti o le macchine virtuali non vengono avviati, non si connettono ad Azure DevOps o si passano offline in modo imprevisto, Azure DevOps registra gli errori nella scheda Diagnostica del pool di agenti e tenta di eliminare la macchina virtuale associata. La configurazione di rete, la personalizzazione delle immagini e i riavvii in sospeso possono causare questi problemi. La connessione alla macchina virtuale per eseguire il debug e raccogliere i log può essere utile per l'analisi.

Se si vuole che Azure DevOps salvi una macchina virtuale dell'agente non integro per l'analisi e non la elimini automaticamente quando rileva lo stato non integro, passare alle impostazioni del progetto Azure DevOps, selezionare Pool di agenti in Pipeline e selezionare il pool di agenti. Scegliere Impostazioni, selezionare l'opzione Salva un agente non integro per l'analisi e scegliere Salva.

Salva l'impostazione dell'agente non integro.

Ora, quando viene rilevato un agente non integro nel set di scalabilità, Azure DevOps salva l'agente e la macchina virtuale associata. L'agente salvato sarà visibile nella scheda Diagnostica dell'interfaccia utente del pool di agenti. Passare alle impostazioni del progetto Azure DevOps, selezionare Pool di agenti in Pipeline, selezionare il pool di agenti, scegliere Diagnostica e prendere nota del nome dell'agente.

Scheda Agenti salvati.

Trovare la macchina virtuale associata nel set di scalabilità di macchine virtuali di Azure tramite il portale di Azure, nell'elenco Istanze.

portale di Azure istanze del set di scalabilità di macchine virtuali.

Selezionare l'istanza, scegliere Connetti ed eseguire l'indagine.

Connettersi all'istanza della macchina virtuale.

Per eliminare l'agente salvato al termine dell'indagine, passare alle impostazioni del progetto Azure DevOps, selezionare Pool di agenti in Pipeline e selezionare il pool di agenti. Scegliere la scheda Diagnostica con etichetta. Trovare l'agente nella scheda Agenti salvati per l'indagine e scegliere Elimina. In questo modo l'agente viene rimosso dal pool ed eliminata la macchina virtuale associata.

Pulsante di eliminazione della scheda Agenti salvati.

Domande frequenti

Quali sono alcuni problemi comuni e le relative soluzioni?

Si osservano più agenti inattivi rispetto a quelli desiderati in vari momenti

Per meglio comprenderne il motivo, vedere Come Azure Pipelines gestisce il set di scalabilità. Durante l'operazione di dimensionamento, l'obiettivo di Azure Pipelines è raggiungere il numero desiderato di agenti inattivi in standby. Il numero di istanze del pool viene aumentato e ridotto lentamente. Nell'arco di una giornata, la mattina le istanze del pool aumentano man mano che le richieste vengono inserite in coda, la sera vengono ridotte man mano che il carico diminuisce. Si tratta di un comportamento previsto in quanto Azure Pipelines converge gradualmente ai vincoli specificati.

set di scalabilità di macchine virtuali l'aumento delle prestazioni non avviene nell'intervallo di cinque minuti previsto

Il processo di dimensionamento viene eseguito ogni cinque minuti, ma se viene elaborata una sola operazione, è possibile notare come l'aumento delle prestazioni non viene eseguito nell'arco di cinque minuti; il processo è attualmente è in fase di progettazione.

Il set di scalabilità di macchine virtuali Linux di Azure DevOps non riesce spesso ad avviare la pipeline

Se si verificano problemi con gli agenti del set di scalabilità, è prima necessario esaminare la scheda Diagnostica nel pool di agenti.

Valutare anche la possibilità di salvare la macchina virtuale non integra ai fini del debug. Per altre informazioni, vedere Agenti non integri.

Gli agenti salvati sono presenti a meno che non vengano eliminati. Se l'agente non viene online in 10 minuti, viene contrassegnato come non integro e salvato, se possibile. Solo una macchina virtuale viene mantenuta in uno stato salvato. Se l'agente passa offline in modo imprevisto (a causa di un riavvio della macchina virtuale o di un'operazione che si verifica nell'immagine), non viene salvato per l'analisi.

Vengono salvate solo le macchine virtuali per le quali gli agenti non vengono avviati. Se una macchina virtuale ha uno stato di errore durante la creazione, non viene salvata. In questo caso, il messaggio nella scheda Diagnostica è "eliminazione del computer non integro" invece di "non è stato possibile avviare".

È possibile selezionare l'opzione per rimuovere automaticamente le macchine virtuali dopo ogni uso per il pool di agenti, ma si noterà che le macchine virtuali non vengono ricreate come dovrebbero e che vengono semplicemente prelevati nuovi processi mentre sono in coda

L'opzione per interrompere la macchina virtuale dopo ogni compilazione è disponibile solo per Windows Server e le immagini Linux supportate. Non è supportata per le immagini del client Windows.

set di scalabilità di macchine virtuali mostra l'agente come offline se la macchina virtuale viene riavviata

La visualizzazione degli agenti come offline se la macchina virtuale viene riavviata è il comportamento previsto. Il servizio agente viene eseguito solo nel contesto di sistema. Tuttavia, se per qualche motivo il computer viene riavviato, viene considerato una macchina virtuale non integra e viene eliminato. Per altre informazioni, vedere Agenti non integri.

Quando gli agenti o le macchine virtuali non vengono avviati, non possono connettersi ad Azure DevOps o andare offline in modo imprevisto, Azure DevOps registra gli errori nella scheda Diagnostica del pool di agenti e tenta di eliminare la macchina virtuale associata. La configurazione di rete, la personalizzazione delle immagini e i riavvii in sospeso possono causare questi problemi. Per evitarli, disabilitare l'aggiornamento software nell'immagine. È anche possibile connettersi alla macchina virtuale per eseguire il debug e raccogliere i log al fine di ricercare la causa del problema.

È possibile visualizzare più tag come _AzureDevOpsElasticPoolTimeStamp per set di scalabilità di macchine virtuali nella gestione dei costi

Alla creazione del pool, viene aggiunto un tag al set di scalabilità per contrassegnare quest'ultimo come "in uso" (così da evitare che due pool usino lo stesso set di scalabilità) e un altro tag per il timestamp che viene aggiornato a ogni esecuzione del processo di configurazione (ogni due ore).

Non è possibile creare un nuovo pool di agenti del set di scalabilità e ricevere un messaggio di errore che indica che esiste già un pool con lo stesso nome

È possibile che venga visualizzato un messaggio di errore, ad This virtual machine scale set is already in use by pool <pool name> esempio perché il tag esiste ancora nel set di scalabilità anche dopo l'eliminazione. Quando un pool di agenti viene eliminato, si tenta di eliminare il tag dal set di scalabilità, ma si tratta di un tentativo di lavoro ottimale e si rinuncia dopo tre tentativi. Inoltre, può essere presente un intervallo massimo di due ore, in cui un set di scalabilità di macchine virtuali non usato da alcun pool di agenti non può essere assegnato a un nuovo pool di agenti. La correzione prevede di attendere il trascorrere di questo intervallo di tempo o di eliminare manualmente il tag del set di scalabilità dal portale di Azure. Quando si visualizza il set di scalabilità nel portale di Azure, selezionare il collegamento Tag a sinistra ed eliminare il tag con etichetta _AzureDevOpsElasticPool.

set di scalabilità di macchine virtuali processo di manutenzione non è in esecuzione sugli agenti o non vengono visualizzati i log

Il processo di manutenzione viene eseguito ogni 24 ore. È possibile che lo spazio delle macchine virtuali sia esaurito prima di questo momento. È consigliabile aumentare le dimensioni del disco della macchina virtuale e aggiungere uno script nella pipeline per eliminarne il contenuto.

Se si specifica AzDevOps come amministratore primario nello script per set di scalabilità di macchine virtuali, è possibile riscontrare problemi con le configurazioni dell'agente nelle istanze del set di scalabilità

Se si specifica AzDevOps come amministratore primario nello script per il set di scalabilità di macchine virtuali, è possibile riscontrare problemi con le configurazioni dell'agente nelle istanze del set di scalabilità (la password per l'utente viene modificata se esiste già).

Questo problema si verifica perché gli script di estensione dell'agente tentano di creare l'utente AzDevOps e modificarne la password.

Nota

È possibile creare l'utente e concedergli autorizzazioni aggiuntive, ma non deve essere l'amministratore primario e nulla deve dipendere dalla password, perché la password verrà modificata. Per evitare il problema, selezionare un utente diverso come amministratore primario durante la creazione del set di AzDevOpsscalabilità, anziché .

L'installazione dell'estensione agente non riesce nelle istanze del set di scalabilità a causa della sicurezza di rete e delle configurazioni del firewall

L'estensione deve essere in grado di scaricare i file dell'agente di compilazione da https://vstsagentpackage.azureedge.net/agent e l'agente di compilazione deve essere in grado di eseguire la registrazione con Azure DevOps Services. Assicurarsi che questo URL e gli URL e gli indirizzi IP correlati ad Azure DevOps Services siano aperti nell'istanza. Per gli indirizzi IP e gli URL che devono essere sbloccati nel firewall, vedere URL di dominio e indirizzi IP consentiti.

Perché lo script di configurazione dell'agente del set di scalabilità chiama Add-MpPreference e configura Windows Defender nell'agente?

Per migliorare le prestazioni e l'affidabilità, gli script di configurazione chiamano Add-MpPreference con un ExclusionPath contenitore C:\ e D:\, che disabilita l'analisi pianificata e in tempo reale di Windows Defender per i file in queste cartelle nell'agente. Per modificare il comportamento predefinito, impostare una variabile di ambiente denominata ELASTIC_POOLS_SKIP_DEFENDER_EXCLUSION su true.

Voglio aumentare le dimensioni del pool. Cosa devo prendere in considerazione?

Prima di aumentare le dimensioni del pool, assicurarsi che l'Rete virtuale di Azure configurato per il pool di set di scalabilità di macchine virtuali abbia un intervallo di spazio di indirizzi sufficiente per contenere tutti i nuovi agenti. In caso contrario, potrebbe essere visualizzato un errore simile a Impossibile aumentare la capacità. La subnet azure-devops-agent-pool-fabrikam-fiber con prefisso indirizzo 12.123.45.224/28 non dispone di capacità sufficiente per 5 indirizzi IP.