Taaktypen en -gebruik

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

Een taak voert een actie uit in een pijplijn en is een verpakt script of een procedure die wordt geabstraheerd met een set invoer. Taken zijn de bouwstenen voor het definiëren van automatisering in een pijplijn.

Wanneer u een taak uitvoert, worden alle taken op volgorde uitgevoerd, één na de andere. Als u dezelfde set taken parallel wilt uitvoeren op meerdere agents of als u bepaalde taken wilt uitvoeren zonder een agent te gebruiken, raadpleegt u taken.

Standaard worden alle taken uitgevoerd in dezelfde context, ongeacht of dit zich op de host of in een taakcontainer bevindt.

U kunt eventueel stapdoelen gebruiken om de context voor een afzonderlijke taak te beheren.

Meer informatie over het opgeven van eigenschappen voor een taak met de ingebouwde taken.

Wanneer u een taak uitvoert, worden alle taken op volgorde uitgevoerd, één na de andere, op een agent. Als u dezelfde set taken parallel wilt uitvoeren op meerdere agents of als u bepaalde taken wilt uitvoeren zonder een agent te gebruiken, raadpleegt u taken.

Zie de YAML-verwijzing voor steps.task voor meer informatie over de algemene kenmerken die door taken worden ondersteund.

Aangepaste taken

Azure DevOps bevat ingebouwde taken om fundamentele build- en implementatiescenario's mogelijk te maken. U kunt ook uw eigen aangepaste taak maken.

Daarnaast biedt Visual Studio Marketplace veel extensies; elk, wanneer ze zijn geïnstalleerd in uw abonnement of verzameling, breidt de taakcatalogus uit met een of meer taken. U kunt ook uw eigen aangepaste extensies schrijven om taken toe te voegen aan Azure Pipelines.

In YAML-pijplijnen verwijst u naar taken op naam. Als een naam overeenkomt met zowel een in-box-taak als een aangepaste taak, heeft de taak in het vak voorrang. U kunt de taak-GUID of een volledig gekwalificeerde naam voor de aangepaste taak gebruiken om dit risico te voorkomen:

steps:
- task: myPublisherId.myExtensionId.myContributionId.myTaskName@1 #format example
- task: qetza.replacetokens.replacetokens-task.replacetokens@3 #working example

Als u een taak wilt zoeken myPublisherId en myExtensionIdselecteert u Ophalen in de marketplace. De waarden na de itemName url-tekenreeks zijn myPublisherId en myExtensionId. U kunt ook de volledig gekwalificeerde naam vinden door de taak toe te voegen aan een release-pijplijn en YAML weergeven te selecteren bij het bewerken van de taak.

Taakversies

Taken zijn versiebeheer en u moet de primaire versie van de taak opgeven die in uw pijplijn wordt gebruikt. Dit kan helpen bij het voorkomen van problemen wanneer nieuwe versies van een taak worden uitgebracht. Taken zijn doorgaans achterwaarts compatibel, maar in sommige scenario's kunnen onvoorspelbare fouten optreden wanneer een taak automatisch wordt bijgewerkt.

Wanneer er een nieuwe secundaire versie wordt uitgebracht (bijvoorbeeld 1.2 tot en met 1.3), gebruikt uw pijplijn automatisch de nieuwe versie. Als er echter een nieuwe primaire versie wordt uitgebracht (bijvoorbeeld 2.0), blijft uw pijplijn de primaire versie gebruiken die u hebt opgegeven totdat u de pijplijn bewerkt en handmatig wijzigt in de nieuwe primaire versie. Het logboek bevat een waarschuwing dat er een nieuwe primaire versie beschikbaar is.

U kunt instellen welke secundaire versie wordt gebruikt door het volledige versienummer van een taak op te geven na het @ teken (bijvoorbeeld: GoTool@0.3.1). U kunt alleen taakversies gebruiken die voor uw organisatie bestaan.

In YAML geeft u de primaire versie op die wordt gebruikt @ in de taaknaam. Als u bijvoorbeeld wilt vastmaken aan versie 2 van de PublishTestResults taak:

steps:
- task: PublishTestResults@2

YAML-pijplijnen zijn niet beschikbaar in TFS.

Opties voor taakbeheer

Elke taak biedt u enkele besturingsopties.

Besturingsopties zijn beschikbaar als sleutels in de task sectie.

- task: string # Required as first property. Name of the task to run.
  inputs: # Inputs for the task.
    string: string # Name/value pairs
  condition: string # Evaluate this condition expression to determine whether to run this task.
  continueOnError: boolean # Continue running even on failure?
  displayName: string # Human-readable name for the task.
  enabled: boolean # Run this task when the job runs?
  env: # Variables to map into the process's environment.
    string: string # Name/value pairs
  name: string # ID of the step.
  timeoutInMinutes: string # Time to wait for this task to complete before the server kills it.

Besturingsopties zijn beschikbaar als sleutels in de task sectie.

- task: string # Required as first property. Name of the task to run.
  inputs: # Inputs for the task.
    string: string # Name/value pairs
  condition: string # Evaluate this condition expression to determine whether to run this task.
  continueOnError: boolean # Continue running even on failure?
  displayName: string # Human-readable name for the task.
  target: string | target # Environment in which to run this task.
  enabled: boolean # Run this task when the job runs?
  env: # Variables to map into the process's environment.
    string: string # Name/value pairs
  name: string # ID of the step.
  timeoutInMinutes: string # Time to wait for this task to complete before the server kills it.
  retryCountOnTaskFailure: string # Number of retries if the task fails.

Besturingsopties zijn beschikbaar als sleutels in de task sectie.

- task: string # Required as first property. Name of the task to run.
  inputs: # Inputs for the task.
    string: string # Name/value pairs
  condition: string # Evaluate this condition expression to determine whether to run this task.
  continueOnError: boolean # Continue running even on failure?
  displayName: string # Human-readable name for the task.
  target: string | target # Environment in which to run this task.
  enabled: boolean # Run this task when the job runs?
  env: # Variables to map into the process's environment.
    string: string # Name/value pairs
  name: string # ID of the step.
  timeoutInMinutes: string # Time to wait for this task to complete before the server kills it.
  retryCountOnTaskFailure: string # Number of retries if the task fails.

Notitie

Een bepaalde taak of taak kan niet eenzijdig beslissen of de taak/fase wordt voortgezet. Wat het kan doen, is een status van geslaagde of mislukte taken bieden, en downstreamtaken hebben elk een voorwaardeberekening waarmee ze kunnen bepalen of ze moeten worden uitgevoerd of niet. De standaardvoorwaarde die effectief wordt uitgevoerd als we een geslaagde status hebben.

Als u doorgaat op een fout, verandert dit op een subtiele manier. Het 'trucs' van alle downstreamstappen/taken in het behandelen van elk resultaat als 'succes' voor het nemen van die beslissing. Of als u het op een andere manier wilt plaatsen, zegt het 'houd niet rekening met het mislukken van deze taak wanneer u een beslissing neemt over de voorwaarde van de structuur die de structuur bevat'.

De time-outperiode begint wanneer de taak wordt uitgevoerd. Het omvat niet de tijd waarop de taak in de wachtrij staat of wacht op een agent.

Notitie

Pijplijnen kunnen een time-out op taakniveau hebben opgegeven naast een time-out op taakniveau. Als het time-outinterval op taakniveau is verstreken voordat de stap is voltooid, wordt de actieve taak beëindigd, zelfs als de stap is geconfigureerd met een langer time-outinterval. Zie Time-outs voor meer informatie.

In deze YAML wordt PublishTestResults@2 ook uitgevoerd als de vorige stap mislukt vanwege de voorwaarde succeededOrFailed().

steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.x'
    architecture: 'x64'
- task: PublishTestResults@2
  inputs:
    testResultsFiles: "**/TEST-*.xml"
  condition: succeededOrFailed()

Voorwaarden

  • Alleen wanneer alle vorige directe en indirecte afhankelijkheden met dezelfde agentgroep zijn geslaagd. Als u verschillende agentpools hebt, worden deze fasen of taken gelijktijdig uitgevoerd. Dit is de standaardinstelling als er geen voorwaarde is ingesteld in de YAML.

  • Zelfs als een eerdere afhankelijkheid is mislukt, tenzij de uitvoering is geannuleerd. Gebruik succeededOrFailed() in de YAML voor deze voorwaarde.

  • Zelfs als een eerdere afhankelijkheid is mislukt, zelfs als de uitvoering is geannuleerd. Gebruik always() in de YAML voor deze voorwaarde.

  • Alleen wanneer een eerdere afhankelijkheid is mislukt. Gebruik failed() in de YAML voor deze voorwaarde.

Doel van stap

Taken worden uitgevoerd in een uitvoeringscontext. Dit is de agenthost of een container. Een afzonderlijke stap kan de context overschrijven door een target. Beschikbare opties zijn het woord host om de agenthost te targeten plus eventuele containers die in de pijplijn zijn gedefinieerd. Voorbeeld:

resources:
  containers:
  - container: pycontainer
    image: python:3.11

steps:
- task: SampleTask@1
  target: host
- task: AnotherTask@1
  target: pycontainer

Hier worden de SampleTask uitvoeringen op de host uitgevoerd en AnotherTask uitgevoerd in een container.

Aantal nieuwe pogingen als taak mislukt

Gebruik retryCountOnTaskFailure dit om het aantal nieuwe pogingen op te geven als de taak mislukt. De standaardwaarde is nul. Zie steps.task in het YAML-schema voor meer informatie over taakeigenschappen.

- task: <name of task>
  retryCountOnTaskFailure: <max number of retries>
   ...

Notitie

  • Hiervoor is agentversie 2.194.0 of hoger vereist. Niet ondersteund voor taken zonder agent.
  • De mislukte taak wordt binnen enkele seconden opnieuw geprobeerd. De wachttijd tussen elke nieuwe poging wordt verhoogd na elke mislukte poging.
  • Er is geen aanname over de idempotentie van de taak. Als de taak neveneffecten heeft (bijvoorbeeld als de taak gedeeltelijk een externe resource heeft gemaakt), kan deze mislukken wanneer deze de tweede keer wordt uitgevoerd.
  • Er is geen informatie over het aantal nieuwe pogingen dat beschikbaar is gemaakt voor de taak.
  • Er wordt een waarschuwing toegevoegd aan de taaklogboeken die aangeven dat deze is mislukt voordat het opnieuw wordt geprobeerd.
  • Alle pogingen om een taak opnieuw uit te voeren, worden weergegeven in de gebruikersinterface als onderdeel van hetzelfde taakknooppunt.

YAML-pijplijnen zijn niet beschikbaar in TFS.

Omgevingsvariabelen

Elke taak heeft een env eigenschap die een lijst is met tekenreeksparen die omgevingsvariabelen vertegenwoordigen die zijn toegewezen aan het taakproces.

task: AzureCLI@2
displayName: Azure CLI
inputs: # Specific to each task
env:
  ENV_VARIABLE_NAME: value
  ENV_VARIABLE_NAME2: value
  ...

In het volgende voorbeeld wordt de script stap uitgevoerd. Dit is een snelkoppeling voor de opdrachtregeltaak, gevolgd door de equivalente taaksyntaxis. In dit voorbeeld wordt een waarde toegewezen aan de AZURE_DEVOPS_EXT_PAT omgevingsvariabele, die wordt gebruikt voor verificatie met Azure DevOps CLI.

# Using the script shortcut syntax
- script: az pipelines variable-group list --output table
  env:
    AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
  displayName: 'List variable groups using the script step'

# Using the task syntax
- task: CmdLine@2
  inputs:
    script: az pipelines variable-group list --output table
  env:
    AZURE_DEVOPS_EXT_PAT: $(System.AccessToken)
  displayName: 'List variable groups using the command line task'

Installatieprogramma's voor buildprogramma's (Azure Pipelines)

Met hulpprogramma-installatieprogramma's kan uw build-pijplijn uw afhankelijkheden installeren en beheren. U kunt met name het volgende doen:

  • Installeer snel een hulpprogramma of runtime (zelfs op door Microsoft gehoste agents) op tijd voor uw CI-build.

  • Valideer uw app of bibliotheek op basis van meerdere versies van een afhankelijkheid, zoals Node.js.

U kunt bijvoorbeeld uw build-pijplijn instellen om uw app uit te voeren en te valideren voor meerdere versies van Node.js.

Voorbeeld: Uw app testen en valideren op meerdere versies van Node.js

Maak een azure-pipelines.yml-bestand in de basismap van uw project met de volgende inhoud.

pool:
  vmImage: ubuntu-latest

steps:
# Node install
- task: UseNode@1
  displayName: Node install
  inputs:
    version: '16.x' # The version we're installing
# Write the installed version to the command line
- script: which node

Maak een nieuwe build-pijplijn en voer deze uit. Bekijk hoe de build wordt uitgevoerd. De Node.js Tool Installer downloadt de Node.js versie als deze nog niet op de agent staat. Het opdrachtregelscript registreert de locatie van de Node.js-versie op schijf.

YAML-pijplijnen zijn niet beschikbaar in TFS.

Taken voor hulpprogramma-installatieprogramma's

Zie De taken van het hulpprogramma-installatieprogramma voor een lijst met de taken van het installatieprogramma.

In-box- en Marketplace-taken uitschakelen

Op de pagina met organisatie-instellingen kunt u Marketplace-taken, in-box-taken of beide uitschakelen. Door Marketplace-taken uit te schakelen, kunt u de beveiliging van uw pijplijnen verbeteren. Als u zowel in-box- als Marketplace-taken uitschakelt, zijn alleen taken die u installeert tfx beschikbaar.

Help en ondersteuning