Spuštění kanálu

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

Tento článek vysvětluje posloupnost aktivit v kanálech Azure Pipelines. Spuštění představuje jedno spuštění kanálu. Kanály průběžné integrace (CI) i průběžného doručování (CD) se skládají z spuštění. Během spuštění zpracovává Azure Pipelines kanál a agenti zpracovávají jednu nebo více úloh, kroků a úloh.

Diagram znázorňující přehled kanálu

Pro každé spuštění Azure Pipelines:

  • Zpracovává kanál.
  • Vyžaduje jeden nebo více agentů ke spouštění úloh.
  • Předá úlohy agentům a shromáždí výsledky.

Pro každou úlohu agent:

  • Připraví se na úlohu.
  • Spustí každý krok v úloze.
  • Zaznamenává výsledky.

Úlohy můžou být úspěšné, neúspěšné, zrušené nebo nedokončí. Porozumění těmto výsledkům vám může pomoct s řešením problémů.

Následující části podrobně popisují proces spuštění kanálu.

Zpracování kanálu

Diagram znázorňující rozbalení šablon YAML

Pokud chcete nejprve zpracovat kanál pro spuštění, Azure Pipelines:

  1. Rozbalí šablony a vyhodnotí výrazy šablon.
  2. Vyhodnotí závislosti na úrovni fáze a vybere první fázi, která se má spustit.

Pro každou fázi, která vybere ke spuštění, Azure Pipelines:

  1. Shromažďuje a ověřuje všechny prostředky úloh pro autorizaci ke spuštění.
  2. Vyhodnotí závislosti na úrovni úlohy a vybere první úlohu, která se má spustit.

Azure Pipelines pro každou úlohu, kterou vybere ke spuštění, provede následující aktivity:

  1. Rozšiřuje YAML strategy: matrix nebo strategy: parallel více konfigurací do několika úloh modulu runtime.
  2. Vyhodnotí podmínky a určí, jestli má úloha nárok na spuštění.
  3. Vyžaduje agenta pro každou oprávněnou úlohu.

Po dokončení úloh modulu runtime azure Pipelines zkontroluje, jestli jsou nové úlohy způsobilé ke spuštění. Podobně jako dokončené fáze azure Pipelines kontroluje, jestli existují nějaké další fáze.

Proměnné

Vysvětlení pořadí zpracování vysvětluje, proč nemůžete v parametrech šablony používat určité proměnné. První krok rozšíření šablony funguje pouze s textem souboru YAML. Proměnné modulu runtime ještě během tohoto kroku neexistují. Po provedení daného kroku se parametry šablony už přeloží.

Proměnné také nemůžete použít k překladu názvů připojení služby nebo prostředí, protože kanál autorizuje prostředky před spuštěním fáze. Proměnné na úrovni fáze a úlohy ještě nejsou k dispozici. Skupiny proměnných jsou samy o sobě prostředkem, který podléhá autorizaci, takže jejich data nejsou při kontrole autorizace prostředků k dispozici.

Můžete použít proměnné na úrovni kanálu, které jsou explicitně zahrnuty v definici prostředku kanálu. Další informace najdete v tématu Metadata prostředků kanálu jako předdefinované proměnné.

Agenti

Když Azure Pipelines potřebuje spustit úlohu, požádá o agenta z fondu. Tento proces funguje jinak pro fondy agentů hostovaných Microsoftem a hostovanými v místním prostředí .

Poznámka:

Úlohy serveru nepoužívají fond, protože běží na samotném serveru Azure Pipelines.

Diagram znázorňující výběr fondu

Paralelní úlohy

Nejprve Azure Pipelines kontroluje paralelní úlohy vaší organizace. Služba sečte všechny spuštěné úlohy na všech agentech a porovná je s počtem paralelních úloh udělených nebo zakoupených.

Pokud nejsou k dispozici žádné paralelní sloty, musí úloha počkat na uvolnění slotu. Jakmile je k dispozici paralelní slot, úloha směruje do příslušného typu agenta.

Agenti hostovaní Microsoftem

Obecně platí, že fond hostovaný Microsoftem je jedním globálním fondem počítačů, i když je fyzicky mnoho různých fondů rozdělených podle zeměpisné oblasti a typu operačního systému. Na základě požadovaného názvu fondu editoru YAML vmImage nebo Klasického editoru azure Pipelines vybere agenta.

Všichni agenti ve fondu Microsoftu jsou čerství a noví virtuální počítače, které nikdy nespouštějí žádné kanály. Po dokončení úlohy se virtuální počítač agenta zahodí.

Agenti v místním prostředí

Jakmile je k dispozici paralelní slot, Azure Pipelines prozkoumá fond v místním prostředí pro kompatibilního agenta. Agenti v místním prostředí nabízejí možnosti, které indikují, že je nainstalovaný konkrétní software nebo je nakonfigurované nastavení. Kanál má požadavky, což jsou možnosti potřebné ke spuštění úlohy.

Pokud Azure Pipelines nemůže najít bezplatného agenta, jehož schopnosti odpovídají požadavkům kanálu, úloha pokračuje v čekání. Pokud ve fondu nejsou žádní agenti, jejichž schopnosti odpovídají požadavkům, úloha selže.

Agenti v místním prostředí se obvykle opakovaně používají při spuštění ke spuštění. U agentů v místním prostředí může mít úloha kanálu vedlejší účinky, jako je zahřívání mezipamětí nebo většina potvrzení, která jsou už dostupná v místním úložišti.

Příprava úlohy

Jakmile agent přijme úlohu, provede následující přípravnou práci:

  1. Stáhne všechny úkoly potřebné ke spuštění úlohy a uloží je do mezipaměti pro budoucí použití.
  2. Vytvoří pracovní prostor na disku pro uložení zdrojového kódu, artefaktů a výstupů použitých při spuštění.

Provedení kroku

Agent spouští kroky postupně v pořadí. Před zahájením kroku je nutné dokončit nebo přeskočit všechny předchozí kroky.

Diagram znázorňující spuštění jednotlivých úloh

Kroky jsou implementovány úkoly, které mohou být Node.js, PowerShell nebo jiné skripty. Systém úloh směruje vstupy a výstupy do záložních skriptů. Úlohy také poskytují běžné služby, jako je změna systémové cesty a vytváření nových proměnných kanálu.

Každý krok běží ve vlastním procesu a izoluje své prostředí z předchozích kroků. Vzhledem k tomuto modelu pro jednotlivé kroky se proměnné prostředí mezi kroky nezachovají. Úlohy a skripty ale můžou používat mechanismus označovaný jako příkazy protokolování ke komunikaci zpět s agentem. Když úloha nebo skript zapíše příkaz protokolování do standardního výstupu, agent provede jakoukoli akci, která příkaz požaduje.

K vytvoření nových proměnných kanálu můžete použít příkaz protokolování. Proměnné kanálu se v dalším kroku automaticky převedou na proměnné prostředí. Skript může nastavit novou proměnnou myVar s hodnotou myValue následujícím způsobem:

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

Generování sestav výsledků a kolekce

Každý krok může hlásit upozornění, chyby a chyby. Krok hlásí chyby a upozornění na stránce souhrnu kanálu tak, že označí úlohy jako úspěšné s problémy nebo hlásí selhání tím, že úlohu označí jako neúspěšnou. Krok selže, pokud buď explicitně hlásí selhání pomocí ##vso příkazu, nebo ukončí skript nenulovým ukončovacím kódem.

Při spuštění kroků agent neustále odesílá výstupní řádky do Azure Pipelines, abyste viděli živý kanál konzoly. Na konci každého kroku se celý výstup kroku nahraje jako soubor protokolu. Po dokončení kanálu si můžete protokol stáhnout.

Diagram znázorňující tok protokolů a výsledků z agenta do služby

Agent může také nahrát artefakty a výsledky testů, které jsou k dispozici i po dokončení kanálu.

Stav a podmínky

Agent sleduje úspěšnost nebo selhání jednotlivých kroků. S úspěšnými kroky s problémy nebo selháním se stav úlohy aktualizuje. Úloha vždy odráží nejhorší výsledek každého z jeho kroků. Pokud krok selže, úloha také selže.

Před spuštěním kroku agent zkontroluje podmínku daného kroku a určí, jestli se má krok spustit. Ve výchozím nastavení se krok spustí jenom v případě, že je stav úlohy úspěšný nebo úspěšný s problémy, ale můžete nastavit další podmínky.

Mnoho úloh má kroky čištění, které je třeba spustit bez ohledu na to, co se stane, aby mohly určit podmínku always(). Vyčištění nebo jiné kroky je také možné nastavit tak, aby běžely pouze při zrušení.

Úspěšný krok vyčištění nemůže uložit úlohu, aby selhala. Po vstupu do selhání se úlohy nikdy nemůžou vrátit k úspěchu.

Časové limity a odpojení

Každá úloha má časový limit. Pokud se úloha v zadaném čase nedokončí, server úlohu zruší. Server se pokusí signalizovat agenta, aby se zastavil, a označí úlohu jako zrušenou. Zrušení na straně agenta znamená zrušit všechny zbývající kroky a nahrát všechny zbývající výsledky.

Úlohy mají období odkladu označované jako časový limit zrušení, ve kterém se má dokončit jakákoli práce se zrušením. Můžete také označit kroky, které se mají spustit i při zrušení. Pokud agent po vypršení časového limitu úlohy a vypršení časového limitu zrušení nenahlásí, že je tato práce zastavená, označí server úlohu jako selhání.

Počítače agentů můžou přestat reagovat na server, pokud hostitelský počítač agenta ztratí napájení nebo je vypnutý nebo pokud dojde k selhání sítě. Aby agent tyto podmínky zjistil, odešle zprávu prezenčního signálu jednou za minutu, aby server věděl, že stále funguje.

Pokud server neobdrží prezenční signál po dobu pěti po sobě jdoucích minut, předpokládá se, že se agent nevrátí. Úloha se označí jako selhání a informuje uživatele, že by měl kanál zopakovat.

Správa běží prostřednictvím Azure DevOps CLI

Spuštění kanálu můžete spravovat pomocí az pipelines spuštění v Azure DevOps CLI. Pokud chcete začít, přečtěte si téma Začínáme s Azure DevOps CLI. Kompletní referenční informace k příkazům najdete v referenčních informacích k rozhraní příkazového řádku Azure DevOps.

Následující příklady ukazují, jak pomocí Azure DevOps CLI zobrazit seznam spuštění kanálu v projektu, zobrazit podrobnosti o konkrétním spuštění a spravovat značky pro spuštění kanálu.

Požadavky

  • Azure CLI s nainstalovaným rozšířením Azure DevOps CLI, jak je popsáno v tématu Začínáme s Azure DevOps CLI. Přihlaste se k Azure pomocí az login.
  • Výchozí organizace nastavená pomocí .az devops configure --defaults organization=<YourOrganizationURL>

Výpis spuštění kanálu

Vypište spuštění kanálu v projektu pomocí příkazu az pipelines runs list .

Následující příkaz zobrazí seznam prvních tří spuštění kanálu se stavem dokončení a výsledkem úspěchu a vrátí výsledek ve formátu tabulky.

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

Zobrazení podrobností o spuštění kanálu

Pomocí příkazu az pipelines run show zobrazte podrobnosti o spuštění kanálu v projektu.

Následující příkaz zobrazí podrobnosti o spuštění kanálu s ID 123, vrátí výsledky ve formátu tabulky a otevře webový prohlížeč na stránce výsledků sestavení 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

Přidání značky ke spuštění kanálu

Přidejte značku ke spuštění kanálu v projektu pomocí příkazu az pipelines run tag add .

Následující příkaz přidá značku YAML do spuštění kanálu s ID 123 a vrátí výsledek ve formátu JSON.

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

[
  "YAML"
]

Výpis značek spuštění kanálu

Pomocí příkazu az pipelines run list v projektu vypište značky pro spuštění kanálu. Následující příkaz zobrazí seznam značek pro spuštění kanálu s ID 123 a vrátí výsledek ve formátu tabulky.

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

Tags
------
YAML

Odstranění značky ze spuštění kanálu

Odstraňte značku z spuštění kanálu v projektu pomocí příkazu az pipelines run tag delete . Následující příkaz odstraní značku YAML z spuštění kanálu s ID 123.

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