Delen via


Pijplijnuitvoeringen

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

In dit artikel wordt de volgorde uitgelegd van activiteiten in Pijplijnuitvoeringen in Azure Pipelines. Een uitvoering vertegenwoordigt één uitvoering van een pijplijn. Zowel CI-pijplijnen (continue integratie) als CD-pijplijnen (continue levering) bestaan uit uitvoeringen. Tijdens een uitvoering verwerkt Azure Pipelines de pijplijn en agents een of meer taken, stappen en taken.

Diagram met een pijplijnoverzicht.

Azure Pipelines voor elke uitvoering:

  • Hiermee wordt de pijplijn verwerkt.
  • Vraagt een of meer agents om taken uit te voeren.
  • Handen van taken af aan agents en verzamelt de resultaten.

Voor elke taak, een agent:

  • Bereidt zich voor op de taak.
  • Voert elke stap in de taak uit.
  • Rapporten met resultaten.

Taken kunnen slagen, mislukken, worden geannuleerd of niet worden voltooid. Als u deze resultaten begrijpt, kunt u problemen oplossen.

In de volgende secties wordt het pijplijnuitvoeringsproces uitgebreid beschreven.

Pijplijnverwerking

Diagram met het uitbreiden van YAML-sjablonen.

Als u een pijplijn voor een uitvoering wilt verwerken, moet u eerst Azure Pipelines:

  1. Hiermee worden sjablonen uitgevouwen en sjabloonexpressies geëvalueerd.
  2. Evalueert afhankelijkheden op faseniveau om de eerste fase te kiezen die moet worden uitgevoerd.

Voor elke fase die wordt geselecteerd om uit te voeren, Azure Pipelines:

  1. Verzamelt en valideert alle taakbronnen voor autorisatie om uit te voeren.
  2. Evalueert afhankelijkheden op taakniveau om de eerste taak te kiezen die moet worden uitgevoerd.

Azure Pipelines voert de volgende activiteiten uit voor elke taak die wordt geselecteerd om uit te voeren:

  1. Hiermee breidt u YAML strategy: matrix of strategy: parallel meerdere configuraties uit naar meerdere runtimetaken.
  2. Evalueert voorwaarden om te bepalen of de taak in aanmerking komt voor uitvoering.
  3. Vraagt een agent aan voor elke in aanmerking komende taak.

Wanneer runtimetaken zijn voltooid, controleert Azure Pipelines of er nieuwe taken in aanmerking komen voor uitvoering. Zodra de fasen zijn voltooid, controleert Azure Pipelines of er meer fasen zijn.

Variabelen

Als u de verwerkingsvolgorde begrijpt, wordt uitgelegd waarom u bepaalde variabelen niet kunt gebruiken in sjabloonparameters. De eerste stap voor sjabloonuitbreiding werkt alleen op de tekst van het YAML-bestand. Runtimevariabelen bestaan nog niet tijdens die stap. Na deze stap zijn sjabloonparameters al opgelost.

U kunt ook geen variabelen gebruiken om serviceverbindings- of omgevingsnamen op te lossen, omdat de pijplijn resources autoriseert voordat een fase kan worden uitgevoerd. Variabelen op fase- en taakniveau zijn nog niet beschikbaar. Variabelegroepen zijn zelf een resource die is onderworpen aan autorisatie, zodat hun gegevens niet beschikbaar zijn bij het controleren van resourceautorisatie.

U kunt variabelen op pijplijnniveau gebruiken die expliciet zijn opgenomen in de definitie van de pijplijnresource. Zie Metagegevens van pijplijnresources als vooraf gedefinieerde variabelen voor meer informatie.

Agents

Wanneer Azure Pipelines een taak moet uitvoeren, vraagt deze een agent aan bij de pool. Het proces werkt anders voor door Microsoft gehoste en zelf-hostende agentpools.

Notitie

Servertaken gebruiken geen pool omdat ze worden uitgevoerd op de Azure Pipelines-server zelf.

Diagram waarin de poolselectie wordt weergegeven.

Parallelle taken

Ten eerste controleert Azure Pipelines op de parallelle taken van uw organisatie. De service telt alle actieve taken op alle agents op en vergelijkt dat met het aantal parallelle taken dat is verleend of aangeschaft.

Als er geen parallelle sites beschikbaar zijn, moet de taak wachten op een site om vrij te maken. Zodra een parallelle site beschikbaar is, wordt de taak gerouteerd naar het juiste agenttype.

Door Microsoft gehoste agents

Conceptueel gezien is de door Microsoft gehoste pool één globale pool van machines, hoewel het fysiek veel verschillende pools zijn gesplitst op geografie en besturingssysteemtype. Op basis van de aangevraagde naam van de YAML vmImage - of klassieke editorgroep selecteert Azure Pipelines een agent.

Alle agents in de Microsoft-pool zijn nieuwe, nieuwe virtuele machines (VM's) die nooit pijplijnen hebben uitgevoerd. Wanneer de taak is voltooid, wordt de agent-VM verwijderd.

Zelf-hostende agents

Zodra een parallelle site beschikbaar is, onderzoekt Azure Pipelines de zelf-hostende pool voor een compatibele agent. Zelf-hostende agents bieden mogelijkheden, wat aangeeft dat bepaalde software is geïnstalleerd of instellingen zijn geconfigureerd. De pijplijn heeft vereisten. Dit zijn de mogelijkheden die nodig zijn om de taak uit te voeren.

Als Azure Pipelines geen gratis agent kan vinden waarvan de mogelijkheden overeenkomen met de vereisten van de pijplijn, blijft de taak wachten. Als er geen agents in de pool staan waarvan de mogelijkheden overeenkomen met de vereisten, mislukt de taak.

Zelf-hostende agents worden meestal opnieuw gebruikt van uitvoering tot uitvoering. Voor zelf-hostende agents kan een pijplijntaak bijwerkingen hebben, zoals het opwarmen van caches of het hebben van de meeste doorvoeringen die al beschikbaar zijn in de lokale opslagplaats.

Jobvoorbereiding

Zodra een agent een taak accepteert, wordt de volgende voorbereiding uitgevoerd:

  1. Hiermee downloadt u alle taken die nodig zijn om de taak uit te voeren en slaat u ze in de cache op voor toekomstig gebruik.
  2. Hiermee maakt u schijfruimte voor het opslaan van de broncode, artefacten en uitvoer die in de uitvoering wordt gebruikt.

Stapuitvoering

De agent voert de stappen sequentieel in volgorde uit. Voordat een stap kan worden gestart, moeten alle vorige stappen zijn voltooid of overgeslagen.

Diagram met het uitvoeren van elke taak.

Stappen worden geïmplementeerd door taken, die kunnen worden Node.js, PowerShell of andere scripts. Het taaksysteem routeert invoer en uitvoer naar de backingscripts. Taken bieden ook algemene services, zoals het wijzigen van het systeempad en het maken van nieuwe pijplijnvariabelen.

Elke stap wordt uitgevoerd in een eigen proces, waarbij de omgeving wordt geïsoleerd van de vorige stappen. Vanwege dit proces-per-stapmodel blijven omgevingsvariabelen niet behouden tussen stappen. Taken en scripts kunnen echter een mechanisme gebruiken dat logboekregistratieopdrachten wordt genoemd om terug te communiceren met de agent. Wanneer een taak of script een logboekregistratieopdracht naar standaarduitvoer schrijft, voert de agent elke actie uit die door de opdracht wordt aangevraagd.

U kunt een logboekregistratieopdracht gebruiken om nieuwe pijplijnvariabelen te maken. Pijplijnvariabelen worden in de volgende stap automatisch geconverteerd naar omgevingsvariabelen. Een script kan een nieuwe variabele myVar met de volgende waarde myValue instellen:

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

Resultaatrapportage en -verzameling

Elke stap kan waarschuwingen, fouten en fouten rapporteren. De stap rapporteert fouten en waarschuwingen op de overzichtspagina van de pijplijn door de taken te markeren als voltooid met problemen of rapporteert fouten door de taak als mislukt te markeren. Een stap mislukt als er expliciet een fout wordt gerapporteerd met behulp van een ##vso opdracht of het script wordt beëindigd met een niet-nul-afsluitcode.

Als de stappen worden uitgevoerd, verzendt de agent voortdurend uitvoerlijnen naar Azure Pipelines, zodat u een livefeed van de console kunt zien. Aan het einde van elke stap wordt de volledige uitvoer van de stap geüpload als een logboekbestand. U kunt het logboek downloaden zodra de pijplijn is voltooid.

Diagram waarin wordt getoond hoe logboeken en resultaten van agent naar service stromen.

De agent kan ook artefacten en testresultaten uploaden, die ook beschikbaar zijn nadat de pijplijn is voltooid.

Status en voorwaarden

De agent houdt het succes of de mislukking van elke stap bij. Als de stappen slagen bij problemen of mislukken, wordt de status van de taak bijgewerkt. De taak weerspiegelt altijd het slechtste resultaat van elk van de stappen. Als een stap mislukt, mislukt de taak ook.

Voordat de agent een stap uitvoert, controleert deze de voorwaarde van die stap om te bepalen of de stap moet worden uitgevoerd. Standaard wordt een stap alleen uitgevoerd wanneer de status van de taak is geslaagd of geslaagd met problemen, maar u kunt andere voorwaarden instellen.

Veel taken hebben opschoningsstappen die moeten worden uitgevoerd, ongeacht wat er nog meer gebeurt, zodat ze een voorwaarde van always(). Opschonen of andere stappen kunnen ook worden ingesteld om alleen te worden uitgevoerd bij annulering.

Een geslaagde opschoningsstap kan de taak niet opslaan als deze mislukt. Taken kunnen nooit teruggaan naar succes na het invoeren van een fout.

Time-outs en verbroken verbindingen

Elke taak heeft een time-out. Als de taak niet binnen de opgegeven tijd wordt voltooid, annuleert de server de taak. De server probeert de agent te signaleren om te stoppen en markeert de taak als geannuleerd. Aan de zijde van de agent betekent annulering dat u alle resterende stappen annuleert en eventuele resterende resultaten uploadt.

Taken hebben een respijtperiode genaamd de time-out voor annuleren waarin alle annuleringswerkzaamheden moeten worden voltooid. U kunt ook stappen markeren om zelfs bij annulering te worden uitgevoerd. Na een time-out voor een taak plus een time-out voor annuleren, als de agent niet rapporteert dat het werk is gestopt, markeert de server de taak als een fout.

Agentcomputers kunnen stoppen met reageren op de server als de hostcomputer van de agent stroom verliest of is uitgeschakeld, of als er een netwerkfout optreedt. Om deze voorwaarden te detecteren, verzendt de agent eenmaal per minuut een heartbeat-bericht om de server te laten weten dat deze nog steeds werkt.

Als de server vijf opeenvolgende minuten geen heartbeat ontvangt, wordt ervan uitgegaan dat de agent niet terugkomt. De taak is gemarkeerd als een fout, zodat de gebruiker weet dat hij of zij de pijplijn opnieuw moet proberen.

Uitvoeringen beheren via de Azure DevOps CLI

U kunt pijplijnuitvoeringen beheren met behulp van az pipelines-uitvoeringen in de Azure DevOps CLI. Zie Aan de slag met Azure DevOps CLI om aan de slag te gaan. Zie azure DevOps CLI-opdrachtreferentie voor een volledige naslaginformatie over opdrachten.

In de volgende voorbeelden ziet u hoe u de Azure DevOps CLI gebruikt om de pijplijnuitvoeringen in uw project weer te geven, details over een specifieke uitvoering weer te geven en tags voor pijplijnuitvoeringen te beheren.

Vereisten

  • Azure CLI met de Azure DevOps CLI-extensie geïnstalleerd zoals beschreven in Aan de slag met Azure DevOps CLI. Meld u aan bij Azure met behulp van az login.
  • De standaardorganisatie die is ingesteld met behulp van az devops configure --defaults organization=<YourOrganizationURL>.

Pijplijnuitvoeringen vermelden

Vermeld de pijplijnuitvoeringen in uw project met de opdracht az pipelines runs list .

Met de volgende opdracht worden de eerste drie pijplijnuitvoeringen weergegeven met de status Voltooid en het resultaat is voltooid en wordt het resultaat in tabelindeling geretourneerd.

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

Details van pijplijnuitvoering weergeven

Geef de details weer voor een pijplijnuitvoering in uw project met de opdracht az pipelines runs show .

De volgende opdracht toont details voor de pijplijnuitvoering met de id 123, retourneert de resultaten in tabelindeling en opent uw webbrowser naar de pagina met buildresultaten van Azure Pipelines.

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

Tag toevoegen aan pijplijnuitvoering

Voeg een tag toe aan een pijplijnuitvoering in uw project met de opdracht az pipelines runs tag add .

Met de volgende opdracht wordt de tag YAML toegevoegd aan de pijplijnuitvoering met de id 123 en wordt het resultaat in JSON-indeling geretourneerd.

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

[
  "YAML"
]

Tags voor pijplijnuitvoering vermelden

Vermeld de tags voor een pijplijnuitvoering in uw project met de opdracht az pipelines runs tag list . De volgende opdracht bevat de tags voor de pijplijnuitvoering met de id 123 en retourneert het resultaat in tabelindeling.

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

Tags
------
YAML

Tag verwijderen uit pijplijnuitvoering

Verwijder een tag uit een pijplijnuitvoering in uw project met de opdracht az pipelines runs tag delete . Met de volgende opdracht verwijdert u de YAML-tag uit de pijplijnuitvoering met id 123.

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