Share via


Sequenza di esecuzione della pipeline

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Le esecuzioni rappresentano un'esecuzione di una pipeline. Durante un'esecuzione, la pipeline viene elaborata e gli agenti elaborano uno o più processi. Un'esecuzione della pipeline include processi, passaggi e attività. Esegue l'integrazione continua (CI) e le pipeline di recapito continuo (CD).

Panoramica della pipeline

Quando si esegue una pipeline, molte cose si verificano sotto le quinte. Anche se spesso non è necessario conoscerli, occasionalmente è utile avere il quadro generale. A livello generale, Azure Pipelines:

Sul lato agente, per ogni processo, un agente:

I processi possono avere esito positivo, negativo o essere annullati. Esistono anche situazioni in cui un processo potrebbe non essere completato. Informazioni su come ciò accade può aiutare a risolvere i problemi.

Suddividere ogni azione una per una.

Elaborare la pipeline

Espandere modelli YAML

Per trasformare una pipeline in un'esecuzione, Azure Pipelines esegue diversi passaggi in questo ordine:

  1. Espandere prima di tutto i modelli e valutare le espressioni modello.
  2. Valutare quindi le dipendenze a livello di fase per selezionare le prime fasi da eseguire.
  3. Per ogni fase selezionata per l'esecuzione, vengono eseguite due operazioni:
  4. Per ogni processo selezionato per l'esecuzione, espandere più configurazioni (strategy: matrix o strategy: parallel in YAML) in più processi di runtime.
  5. Per ogni processo di runtime, valutare le condizioni per decidere se il processo è idoneo per l'esecuzione.
  6. Richiedere un agente per ogni processo di runtime idoneo.

Al termine dei processi di runtime, Azure Pipelines noterà se sono presenti nuovi processi idonei per l'esecuzione. In tal caso, i passaggi da 4 a 6 vengono ripetuti con i nuovi processi. Analogamente, al completamento delle fasi, i passaggi da 2 a 6 verranno ripetuti per tutte le nuove fasi.

Questo ordinamento consente di rispondere a una domanda comune: perché non è possibile usare determinate variabili nei parametri del modello? Il Passaggio 1, espansione del modello, opera esclusivamente sul testo del documento YAML. Le variabili di runtime non esistono durante questo passaggio. Dopo il passaggio 1, i parametri del modello sono stati risolti e non esistono più.

Risponde anche a un altro problema comune: perché non è possibile usare le variabili per risolvere i nomi di connessione/ambiente del servizio? Le risorse sono autorizzate prima che sia possibile avviare l'esecuzione di una fase, pertanto le variabili a livello di fase e di processo non sono disponibili. Le variabili a livello di pipeline possono essere usate, ma solo quelle variabili incluse in modo esplicito nella pipeline. I gruppi di variabili sono una risorsa soggetta ad autorizzazione, pertanto i dati non sono analogamente disponibili durante il controllo dell'autorizzazione delle risorse.

Richiedere un agente

Ogni volta che Azure Pipelines deve eseguire un processo, chiederà al pool un agente. I processi del server sono un'eccezione, poiché vengono eseguiti nel server Azure Pipelines stesso. I pool di agenti ospitati da Microsoft e self-hosted funzionano in modo leggermente diverso.

Richieste del pool di agenti ospitati da Microsoft

Prima di tutto, il servizio verifica i processi paralleli dell'organizzazione. Aggiunge tutti i processi in esecuzione in tutti gli agenti ospitati da Microsoft e lo confronta con il numero di processi paralleli acquistati. Se non sono disponibili slot paralleli, il processo deve attendere che uno slot venga liberato.

Quando è disponibile uno slot parallelo, il processo viene instradato al tipo di agente richiesto. Concettualmente, il pool ospitato da Microsoft è un enorme pool globale di computer. In realtà, si tratta di molti pool fisici diversi suddivisi per tipo di sistema operativo e geography. In base al vmImage nome (in YAML) o al nome del pool (nell'editor classico) richiesto, viene selezionato un agente.

Selezione pool

Tutti gli agenti nel pool Microsoft sono nuove macchine virtuali che non hanno eseguito alcuna pipeline in precedenza. Al termine del processo, la macchina virtuale dell'agente verrà rimossa.

Richieste del pool di agenti self-hosted

Analogamente al pool ospitato da Microsoft, il servizio verifica innanzitutto i processi paralleli dell'organizzazione. Aggiunge tutti i processi in esecuzione in tutti gli agenti self-hosted e lo confronta con il numero di processi paralleli acquistati. Se non sono disponibili slot paralleli, il processo deve attendere che uno slot venga liberato.

Una volta disponibile uno slot parallelo, il pool self-hosted viene esaminato per un agente compatibile. Gli agenti self-hosted offrono funzionalità, ovvero stringhe che indicano che è installato un software specifico o sono configurate le impostazioni. La pipeline ha richieste, ovvero le funzionalità necessarie per eseguire il processo. Se non è possibile trovare un agente gratuito le cui funzionalità corrispondono alle richieste della pipeline, il processo continuerà ad attendere. Se nel pool non sono presenti agenti le cui funzionalità corrispondono alle richieste, il processo avrà esito negativo.

Gli agenti self-hosted vengono in genere riutilizzati dall'esecuzione per l'esecuzione. Per gli agenti self-hosted, un processo della pipeline può avere effetti collaterali, ad esempio il riscaldamento delle cache o la disponibilità della maggior parte dei commit nel repository locale.

Preparare l'esecuzione di un processo

Dopo che un agente ha accettato un processo, è necessario eseguire alcune operazioni di preparazione. L'agente scarica e memorizza nella cache tutte le attività necessarie per eseguire il processo. Crea spazio di lavoro su disco per contenere il codice sorgente, gli artefatti e gli output usati nell'esecuzione. Inizia quindi a eseguire i passaggi.

Eseguire ogni passaggio

I passaggi vengono eseguiti in sequenza, uno dopo l'altro. Prima di iniziare un passaggio, è necessario completare tutti i passaggi precedenti (o ignorare).

Eseguire ogni attività

I passaggi vengono implementati dalle attività. Le attività stesse vengono implementate come Node.js o script di PowerShell. Il sistema attività instrada input e output agli script di backup. Fornisce anche alcuni servizi comuni, ad esempio la modifica del percorso di sistema e la creazione di nuove variabili della pipeline.

Ogni passaggio viene eseguito nel proprio processo, isolandolo dall'ambiente lasciato dai passaggi precedenti. A causa di questo modello in base al processo, le variabili di ambiente non vengono mantenute tra i passaggi. Tuttavia, le attività e gli script hanno un meccanismo per comunicare di nuovo con l'agente: comandi di registrazione. Quando un'attività o uno script scrive un comando di registrazione in modalità standard, l'agente eseguirà qualsiasi azione richiesta.

È disponibile un comando dell'agente per creare nuove variabili della pipeline. Le variabili della pipeline verranno convertite automaticamente in variabili di ambiente nel passaggio successivo. Per impostare una nuova variabile myVar con un valore , myValueuno script può eseguire questa operazione:

echo '##vso[task.setVariable variable=myVar]myValue'
Write-Host "##vso[task.setVariable variable=myVar]myValue"

Report e raccolta dei risultati

Ogni passaggio può segnalare avvisi, errori ed errori. Gli errori e gli avvisi vengono segnalati alla pagina di riepilogo della pipeline, contrassegnando l'attività come "riuscita con problemi". Gli errori vengono segnalati anche alla pagina di riepilogo, ma contrassegnano l'attività come "non riuscita". Un passaggio è un errore se segnala in modo esplicito un errore (usando un ##vso comando) o termina lo script con un codice di uscita diverso da zero.

Log e risultati passano dall'agente al servizio

Durante l'esecuzione dei passaggi, l'agente invia costantemente righe di output al servizio. Ecco perché è possibile visualizzare un feed live della console. Alla fine di ogni passaggio, viene caricato anche l'intero output del passaggio come file di log. I log possono essere scaricati al termine della pipeline. Altri elementi che l'agente può caricare includono artefatti e risultati dei test. Questi sono disponibili anche al termine della pipeline.

Stato e condizioni

L'agente tiene traccia dell'esito positivo o negativo di ogni passaggio. Quando i passaggi hanno esito positivo o negativo, lo stato del processo verrà aggiornato. Il processo riflette sempre il risultato "peggiore" di ognuno dei passaggi: se un passaggio ha esito negativo, anche il processo ha esito negativo.

Prima di eseguire un passaggio, l'agente verificherà la condizione del passaggio per determinare se deve essere eseguita. Per impostazione predefinita, un passaggio verrà eseguito solo quando lo stato del processo è riuscito o ha esito positivo con problemi. Molti processi hanno passaggi di pulizia che devono essere eseguiti indipendentemente da ciò che è accaduto, in modo che possano specificare una condizione "always()". I passaggi di pulizia possono anche essere impostati per l'esecuzione solo in caso di annullamento. Un passaggio di pulizia riuscito non può salvare il processo da errori; I processi non possono mai tornare al successo dopo aver immesso un errore.

Timeout e disconnessioni

Ogni processo ha un timeout. Se il processo non è stato completato nel tempo specificato, il server annulla il processo. Tenterà di segnalare l'arresto dell'agente e contrassegnerà il processo come annullato. Sul lato agente, ciò significa annullare tutti i passaggi rimanenti e caricare eventuali risultati rimanenti.

I processi hanno un periodo di tolleranza noto come timeout di annullamento in cui completare qualsiasi lavoro di annullamento. Tenere presente che i passaggi possono essere contrassegnati per l'esecuzione anche in caso di annullamento. Dopo il timeout più il timeout di annullamento, se l'agente non ha segnalato che il lavoro è stato arrestato, il server contrassegnerà il processo come errore.

Poiché Azure Pipelines distribuisce il lavoro ai computer agente, di tanto in tanto, gli agenti potrebbero smettere di rispondere al server. Questo problema può verificarsi se il computer host dell'agente si allontana (perdita di alimentazione, macchina virtuale disattivata) o se si verifica un errore di rete. Per rilevare queste condizioni, l'agente invia un messaggio di heartbeat una volta al minuto per informare il server che è ancora operativo. Se il server non riceve un heartbeat per cinque minuti consecutivi, presuppone che l'agente non torni indietro. Il processo è contrassegnato come errore, in modo che l'utente sappia che deve ripetere la pipeline.

Gestire le esecuzioni tramite l'interfaccia della riga di comando

Usando l'interfaccia della riga di comando di Azure DevOps, è possibile elencare le esecuzioni della pipeline nel progetto e visualizzare i dettagli su un'esecuzione specifica. È anche possibile aggiungere ed eliminare tag nell'esecuzione della pipeline.

Prerequisiti

  • È necessario aver installato l'estensione dell'interfaccia della riga di comando di Azure DevOps come descritto in Introduzione all'interfaccia della riga di comando di Azure DevOps.
  • Accedere ad Azure DevOps usando az login.
  • Per gli esempi in questo articolo, impostare l'organizzazione predefinita usando az devops configure --defaults organization=YourOrganizationURL.

Elencare le esecuzioni della pipeline

Elencare le esecuzioni della pipeline nel progetto con il comando az pipelines runs list . Per iniziare, vedere Introduzione all'interfaccia della riga di comando di Azure DevOps.

az pipelines runs list [--branch]
                       [--org]
                       [--pipeline-ids]
                       [--project]
                       [--query-order {FinishTimeAsc, FinishTimeDesc, QueueTimeAsc, QueueTimeDesc, StartTimeAsc, StartTimeDesc}]
                       [--reason {all, batchedCI, buildCompletion, checkInShelveset, individualCI, manual, pullRequest, schedule, triggered, userCreated, validateShelveset}]
                       [--requested-for]
                       [--result {canceled, failed, none, partiallySucceeded, succeeded}]
                       [--status {all, cancelling, completed, inProgress, none, notStarted, postponed}]
                       [--tags]
                       [--top]

Parametri facoltativi

  • branch: filtra in base alle compilazioni per questo ramo.
  • org: URL dell'organizzazione di Azure DevOps. È possibile configurare l'organizzazione predefinita usando az devops configure -d organization=ORG_URL. Obbligatorio se non è configurato come predefinito o selezionato tramite git config. Esempio: --org https://dev.azure.com/MyOrganizationName/.
  • pipeline-ids: ID delimitati da spazi di definizioni per cui elencare le compilazioni.
  • project: nome o ID del progetto. È possibile configurare il progetto predefinito usando az devops configure -d project=NAME_OR_ID. Obbligatorio se non è configurato come predefinito o selezionato tramite git config.
  • query-order: definire l'ordine in cui sono elencate le esecuzioni della pipeline. I valori accettati sono FinishTimeAsc, FinishTimeDesc, QueueTimeAsc, QueueTimeDesc, StartTimeAsc e StartTimeDesc.
  • reason: solo le compilazioni dell'elenco per questo motivo specificato. I valori accettati sono batchCI, buildCompletion, checkInShelveset, individualCI, manual, pullRequest, schedule, triggered, userCreated e validateShelveset.
  • requested-for: limite alle compilazioni richieste per un utente o un gruppo specificato.
  • result: limite alle compilazioni con un risultato specificato. I valori accettati vengono annullati, non riusciti, none, parzialmenteSucceeded e hanno avuto esito positivo.
  • status: limite alle compilazioni con uno stato specificato. I valori accettati sono tutti, cancelling, completed, inProgress, none, notStarted e posticipati.
  • tags: limitarsi alle compilazioni con ognuno dei tag specificati. Spazio separato.
  • top: numero massimo di compilazioni da elencare.

Esempio

Il comando seguente elenca le prime tre esecuzioni della pipeline con stato completato e il risultato è riuscito e restituisce il risultato in formato tabella.

az pipelines runs list --status completed --result succeeded --top 3 --output table

Run ID    Number      Status     Result     Pipeline ID    Pipeline Name               Source Branch    Queued Time                 Reason
--------  ----------  ---------  ---------  -------------  --------------------------  ---------------  --------------------------  ------
125       20200124.1  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 18:56:10.067588  manual
123       20200123.2  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:55:56.633450  manual
122       20200123.1  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:48:05.574742  manual

Visualizzare i dettagli dell'esecuzione della pipeline

Visualizzare i dettagli per un'esecuzione della pipeline nel progetto con il comando az pipelines runs show . Per iniziare, vedere Introduzione all'interfaccia della riga di comando di Azure DevOps.

az pipelines runs show --id
                       [--open]
                       [--org]
                       [--project]

Parametri

  • id: obbligatorio. ID dell'esecuzione della pipeline.
  • open: facoltativo. Apre la pagina dei risultati di compilazione nel Web browser.
  • org: URL dell'organizzazione di Azure DevOps. È possibile configurare l'organizzazione predefinita usando az devops configure -d organization=ORG_URL. Obbligatorio se non è configurato come predefinito o selezionato tramite git config. Esempio: --org https://dev.azure.com/MyOrganizationName/.
  • project: nome o ID del progetto. È possibile configurare il progetto predefinito usando az devops configure -d project=NAME_OR_ID. Obbligatorio se non è configurato come predefinito o selezionato tramite git config.

Esempio

Il comando seguente mostra i dettagli per l'esecuzione della pipeline con ID 123 e restituisce i risultati in formato tabella. Apre anche il Web browser alla pagina dei risultati di compilazione.

az pipelines runs show --id 122 --open --output table

Run ID    Number      Status     Result     Pipeline ID    Pipeline Name               Source Branch    Queued Time                 Reason
--------  ----------  ---------  ---------  -------------  --------------------------  ---------------  --------------------------  --------
123       20200123.2  completed  succeeded  12             Githubname.pipelines-java  master           2020-01-23 11:55:56.633450  manual

Aggiungere tag all'esecuzione della pipeline

Aggiungere un tag a un'esecuzione della pipeline nel progetto con il comando az pipelines runs tag add . Per iniziare, vedere Introduzione all'interfaccia della riga di comando di Azure DevOps.

az pipelines runs tag add --run-id
                          --tags
                          [--org]
                          [--project]

Parametri

  • run-id: obbligatorio. ID dell'esecuzione della pipeline.
  • tags: obbligatorio. Tag da aggiungere all'esecuzione della pipeline (valori delimitati da virgole).
  • org: URL dell'organizzazione di Azure DevOps. È possibile configurare l'organizzazione predefinita usando az devops configure -d organization=ORG_URL. Obbligatorio se non è configurato come predefinito o selezionato tramite git config. Esempio: --org https://dev.azure.com/MyOrganizationName/.
  • project: nome o ID del progetto. È possibile configurare il progetto predefinito usando az devops configure -d project=NAME_OR_ID. Obbligatorio se non è configurato come predefinito o selezionato tramite git config.

Esempio

Il comando seguente aggiunge il tag YAML all'esecuzione della pipeline con ID 123 e restituisce il risultato in formato JSON.

az pipelines runs tag add --run-id 123 --tags YAML --output json

[
  "YAML"
]

Elencare i tag di esecuzione della pipeline

Elencare i tag per un'esecuzione della pipeline nel progetto con il comando az pipelines runs tag list . Per iniziare, vedere Introduzione all'interfaccia della riga di comando di Azure DevOps.

az pipelines runs tag list --run-id
                           [--org]
                           [--project]

Parametri

  • run-id: obbligatorio. ID dell'esecuzione della pipeline.
  • org: URL dell'organizzazione di Azure DevOps. È possibile configurare l'organizzazione predefinita usando az devops configure -d organization=ORG_URL. Obbligatorio se non è configurato come predefinito o selezionato tramite git config. Esempio: --org https://dev.azure.com/MyOrganizationName/.
  • progetto: nome o ID del progetto. È possibile configurare il progetto predefinito usando az devops configure -d project=NAME_OR_ID. Obbligatorio se non è configurato come predefinito o selezionato usando git config.

Esempio

Il comando seguente elenca i tag per l'esecuzione della pipeline con l'ID 123 e restituisce il risultato in formato tabella.

az pipelines runs tag list --run-id 123 --output table

Tags
------
YAML

Eliminare il tag dall'esecuzione della pipeline

Eliminare un tag da un'esecuzione della pipeline nel progetto con il comando az pipelines esegue l'eliminazione dei tag . Per iniziare, vedere Introduzione all'interfaccia della riga di comando di Azure DevOps.

az pipelines runs tag delete --run-id
                             --tag
                             [--org]
                             [--project]

Parametri

  • run-id: obbligatorio. ID dell'esecuzione della pipeline.
  • tag: obbligatorio. Tag da eliminare dall'esecuzione della pipeline.
  • org: URL dell'organizzazione di Azure DevOps. È possibile configurare l'organizzazione predefinita usando az devops configure -d organization=ORG_URL. Obbligatorio se non è configurato come predefinito o selezionato usando git config. Esempio: --org https://dev.azure.com/MyOrganizationName/.
  • progetto: nome o ID del progetto. È possibile configurare il progetto predefinito usando az devops configure -d project=NAME_OR_ID. Obbligatorio se non è configurato come predefinito o selezionato usando git config.

Esempio

Il comando seguente elimina il tag YAML dall'esecuzione della pipeline con ID 123.

az pipelines runs tag delete --run-id 123 --tag YAML