Typy úkolů a využití

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Úloha provádí akci v kanálu a je zabalený skript nebo procedura abstrahovaná sadou vstupů. Úkoly jsou stavební bloky pro definování automatizace v kanálu.

Když spustíte úlohu, všechny úkoly se spouštějí postupně, jeden za druhým. Pokud chcete spustit stejnou sadu úloh paralelně na více agentech nebo spouštět některé úlohy bez použití agenta, podívejte se na úlohy.

Ve výchozím nastavení se všechny úkoly spouštějí ve stejném kontextu, ať už jsou na hostiteli nebo v kontejneru úloh.

Volitelně můžete použít cíle kroku k řízení kontextu pro jednotlivé úkoly.

Přečtěte si další informace o tom, jak zadat vlastnosti úkolu pomocí předdefinovaných úkolů.

Když spustíte úlohu, všechny úlohy se spouštějí postupně, jeden po druhém, v agentu. Pokud chcete spustit stejnou sadu úloh paralelně na více agentech nebo spouštět některé úlohy bez použití agenta, podívejte se na úlohy.

Další informace o obecných atributech podporovaných úlohami najdete v referenční dokumentaci YAML pro steps.task.

Vlastní úkoly

Azure DevOps zahrnuje integrované úlohy , které umožňují základní scénáře sestavení a nasazení. Můžete také vytvořit vlastní úkol.

Kromě toho Visual Studio Marketplace nabízí mnoho rozšíření, z nichž každá při instalaci do vašeho předplatného nebo kolekce rozšiřuje katalog úloh o jednu nebo více úloh. Můžete také napsat vlastní rozšíření pro přidávání úloh do Azure Pipelines.

V kanálech YAML odkazujete na úlohy podle názvu. Pokud název odpovídá úkolu v poli i vlastnímu úkolu, bude mít přednost úkol v poli. Můžete použít identifikátor GUID úkolu nebo plně kvalifikovaný název vlastního úkolu, abyste se vyhnuli tomuto riziku:

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

Pokud chcete najít myPublisherId a myExtensionIdvybrat možnost Získat na úkolu na marketplace. Hodnoty za itemName řetězcem adresy URL jsou myPublisherId a myExtensionId. Plně kvalifikovaný název najdete také tak, že přidáte úlohu do kanálu verze a při úpravách úkolu vyberete Zobrazit YAML .

Verze úloh

Úlohy jsou verze a musíte zadat hlavní verzi úlohy použité ve vašem kanálu. To může pomoct zabránit problémům při vydání nových verzí úlohy. Úkoly jsou obvykle zpětně kompatibilní, ale v některých scénářích můžete při automatické aktualizaci úkolu narazit na nepředvídatelné chyby.

Při vydání nové podverze (například 1.2 až 1.3) kanál automaticky použije novou verzi. Pokud je ale vydána nová hlavní verze (například 2.0), kanál bude nadále používat hlavní verzi, kterou jste zadali, dokud kanál upravíte a ručně změníte na novou hlavní verzi. Protokol bude obsahovat upozornění, že je k dispozici nová hlavní verze.

Můžete nastavit, která podverze se použije, zadáním úplného čísla verze úkolu za @ znaménkem (příklad: GoTool@0.3.1). Můžete použít jenom verze úloh, které existují pro vaši organizaci.

V JAZYCE YAML zadáte hlavní verzi, která se použije @ v názvu úkolu. Pokud chcete například připnout na verzi 2 PublishTestResults úkolu:

steps:
- task: PublishTestResults@2

Kanály YAML nejsou v TFS dostupné.

Možnosti ovládání úloh

Každý úkol nabízí některé možnosti řízení.

Možnosti řízení jsou k dispozici jako klávesy v oddílu task .

- 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.

Možnosti řízení jsou k dispozici jako klávesy v oddílu task .

- 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.

Možnosti řízení jsou k dispozici jako klávesy v oddílu task .

- 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.

Poznámka:

Daný úkol nebo úloha nemůže jednostranně rozhodnout, jestli úloha nebo fáze pokračuje. Co může udělat, je nabídnout stav úspěšných nebo neúspěšných a podřízené úkoly a úlohy mají výpočty podmínek, které jim umožňují rozhodnout, jestli se mají spustit, nebo ne. Výchozí podmínka, která je efektivně spuštěna, pokud jsme v úspěšném stavu.

Pokračujte v tom, že chybu změníte jemným způsobem. Pro účely tohoto rozhodnutí efektivně "triky" všechny podřízené kroky a úlohy zachází s jakýmkoli výsledkem jako s "úspěchem". Nebo jinak řečeno, říká se"nebere v úvahu selhání tohoto úkolu, když rozhodujete o podmínce struktury, která obsahuje".

Časový limit začíná při spuštění úkolu. Nezahrnuje čas, kdy je úloha zařazena do fronty nebo čeká na agenta.

Poznámka:

Kanály můžou mít kromě časového limitu na úrovni úlohy také časový limit na úrovni úlohy. Pokud časový limit na úrovni úlohy uplynul před dokončením kroku, je spuštěná úloha ukončena, i když je krok nakonfigurovaný s delším časovým limitem. Další informace najdete v tématu Vypršení časových limitů.

V tomto JAZYCE YAML se spustí i v případě, PublishTestResults@2 že předchozí krok selže kvůli podmínce succeededOrFailed().

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

Podmínky

  • Pouze pokud byly všechny předchozí přímé a nepřímé závislosti se stejným fondem agentů úspěšné. Pokud máte různé fondy agentů, tyto fáze nebo úlohy se spustí souběžně. Toto je výchozí nastavení, pokud v YAML není nastavená podmínka.

  • I v případě, že předchozí závislost selhala, pokud nebylo spuštění zrušeno. Použije succeededOrFailed() se v YAML pro tuto podmínku.

  • I když došlo k selhání předchozí závislosti, i když se spuštění zrušilo. Použije always() se v YAML pro tuto podmínku.

  • Pouze v případech, kdy předchozí závislost selhala. Použije failed() se v YAML pro tuto podmínku.

Cíl kroku

Úlohy se spouští v kontextu spuštění, což je hostitel agenta nebo kontejner. Jednotlivý krok může přepsat jeho kontext zadáním parametru target. Dostupné možnosti jsou slovo host pro cílení na hostitele agenta a všechny kontejnery definované v kanálu. Příklad:

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

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

Tady běží SampleTask na hostiteli a AnotherTask běží v kontejneru.

Počet opakování, pokud se úloha nezdařila

Slouží retryCountOnTaskFailure k určení počtu opakování v případě selhání úkolu. Výchozí hodnota je nula.

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

Poznámka:

  • Vyžaduje agenta verze 2.194.0 nebo novější. Nepodporuje se u úloh bez agentů.
  • Neúspěšný úkol opakuje v sekundách. Doba čekání mezi jednotlivými opakováními se po každém neúspěšném pokusu zvýší.
  • Neexistuje žádný předpoklad o idempotenci úkolu. Pokud má úloha vedlejší účinky (například pokud částečně vytvořila externí prostředek), může selhat při druhém spuštění.
  • Pro úkol není k dispozici žádné informace o počtu opakování.
  • Do protokolů úloh se přidá upozornění, které značí, že se nezdařilo před opakováním.
  • Všechny pokusy o opakování úkolu se zobrazí v uživatelském rozhraní jako součást stejného uzlu úkolu.

Kanály YAML nejsou v TFS dostupné.

Proměnné prostředí

Každý úkol má env vlastnost, která je seznam dvojic řetězců, které představují proměnné prostředí mapované do procesu úkolu.

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

Následující příklad spustí script krok, což je zástupce pro úlohu příkazového řádku, následovaný ekvivalentní syntaxí úlohy. Tento příklad přiřadí hodnotu proměnné AZURE_DEVOPS_EXT_PAT prostředí, která se používá k ověřování pomocí 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'

Instalační programy nástrojů sestavení (Azure Pipelines)

Instalační programy nástrojů umožňují kanálu buildu instalovat a řídit závislosti. Konkrétně můžete:

  • Nainstalujte nástroj nebo modul runtime za běhu (dokonce i na agenty hostované Microsoftem) za běhu pro sestavení CI.

  • Ověřte aplikaci nebo knihovnu na více verzích závislosti, jako je Node.js.

Můžete například nastavit kanál buildu tak, aby běžel a ověřil aplikaci pro více verzí Node.js.

Příklad: Testování a ověření aplikace ve více verzích Node.js

V základním adresáři projektu vytvořte soubor azure-pipelines.yml s následujícím obsahem.

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

Vytvořte nový kanál buildu a spusťte ho. Podívejte se, jak se sestavení spouští. Instalační program nástroje Node.js stáhne verzi Node.js, pokud ještě není v agentovi. Skript příkazového řádku zaznamená umístění verze Node.js na disku.

Kanály YAML nejsou v TFS dostupné.

Úlohy instalačního programu nástrojů

Seznam úkolů instalačního programu nástrojů najdete v tématu Úlohy instalačního programu nástrojů.

Zakázání úkolů v místním prostředí a Marketplace

Na stránce nastavení organizace můžete zakázat úlohy z Marketplace, úkoly v boxu nebo obojí. Zakázání úloh Marketplace může pomoct zvýšit zabezpečení vašich kanálů. Pokud zakážete jak úkoly v boxu, tak úlohy z Marketplace, budou k dispozici jenom úlohy, které instalujete tfx .

Nápověda a podpora