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 myExtensionId
selecteert 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.
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 slagen. Als u verschillende agentpools hebt, worden deze fasen of taken gelijktijdig uitgevoerd. Deze voorwaarde is de standaardvoorwaarde als er geen voorwaarde is ingesteld in de YAML.
Zelfs als een eerdere afhankelijkheid mislukt, tenzij de uitvoering wordt geannuleerd. Gebruik
succeededOrFailed()
in de YAML voor deze voorwaarde.Zelfs als een eerdere afhankelijkheid mislukt en zelfs als de uitvoering wordt geannuleerd. Gebruik
always()
in de YAML voor deze voorwaarde.Alleen wanneer een eerdere afhankelijkheid mislukt. Gebruik
failed()
in de YAML voor deze voorwaarde.
- Aangepaste voorwaarden, die bestaan uit expressies
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 nieuwe pogingen. 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. Op Azure DevOps Server 2022 worden nieuwe pogingen niet ondersteund voor taken zonder agent. Zie de azure DevOps-service-update van 16 november 2021 - Automatische nieuwe pogingen voor een taak en azure DevOps-service-update van 14 juni 2025 - Nieuwe pogingen voor servertaken.
- De wachttijd tussen elke nieuwe poging wordt verhoogd na elke mislukte poging. De eerste poging vindt plaats in seconden.
- 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'
- task: Bash@3
inputs:
targetType: # 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 Bash@3, gevolgd door de equivalente taaksyntaxis. In dit voorbeeld wordt een waarde toegewezen aan de ENV_VARIABLE_NAME
omgevingsvariabele en wordt de waarde herhaald.
# Using the script shortcut syntax
- script: echo "This is " $ENV_VARIABLE_NAME
env:
ENV_VARIABLE_NAME: "my value"
displayName: 'echo environment variable'
# Using the task syntax
- task: Bash@2
inputs:
script: echo "This is " $ENV_VARIABLE_NAME
env:
ENV_VARIABLE_NAME: "my value"
displayName: 'echo environment variable'
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.
Verwante artikelen:
Help en ondersteuning
- Verken tips voor probleemoplossing.
- Krijg advies over Stack Overflow.
- Stel uw vragen, zoek naar antwoorden of stel een functie voor in de Azure DevOps Developer Community.
- Ondersteuning krijgen voor Azure DevOps.