Pořadí spuštění kanálu

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

Spuštění představují jedno spuštění kanálu. Během běhu se kanál zpracuje a agenti zpracují jednu nebo více úloh. Spuštění kanálu zahrnuje úlohy, kroky a úlohy. Spouští kanály kontinuální integrace (CI) i průběžného doručování (CD).

Přehled kanálu

Když spustíte kanál, mnoho věcí se děje pod jeho pozadím. I když o nich často nepotřebujete vědět, občas je užitečné mít celkový přehled. Azure Pipelines bude na základní úrovni:

Na straně agenta agent pro každou úlohu:

Úlohy můžou být úspěšné, neúspěšné nebo zrušené. Existují také situace, kdy se úloha nemusí dokončit. Pochopení způsobu, jakým k tomu dochází, vám může pomoct s řešením problémů.

Pojďme si jednotlivé akce rozdělit po jedné.

Zpracování kanálu

Rozbalit šablony YAML

Pokud chcete kanál převést na spuštění, azure Pipelines provede několik kroků v tomto pořadí:

  1. Nejprve rozbalte šablony a vyhodnoťte výrazy šablon.
  2. Dále vyhodnoťte závislosti na úrovni fáze a vyberte první fáze, které se mají spustit.
  3. U každé fáze vybrané ke spuštění se stanou dvě věci:
  4. Pro každou vybranou úlohu, která se má spustit, rozbalte více konfigurací (strategy: matrix nebo strategy: parallel v JAZYCE YAML) do několika úloh modulu runtime.
  5. Pro každou úlohu modulu runtime vyhodnoťte podmínky a rozhodněte se, jestli je tato úloha způsobilá ke spuštění.
  6. Požádejte o agenta pro každou opravňující úlohu modulu runtime.

Po dokončení úloh modulu runtime služba Azure Pipelines zjistí, jestli je možné spustit nové úlohy. Pokud ano, kroky 4 až 6 opakujte s novými úlohami. Podobně se po dokončení fází kroky 2 až 6 zopakují pro všechny nové fáze.

Toto řazení pomáhá zodpovědět běžnou otázku: proč nemůžu v parametrech šablony použít určité proměnné? Krok 1, rozšíření šablony, pracuje pouze s textem dokumentu YAML. Běhové proměnné během tohoto kroku neexistují. Po provedení kroku 1 jsou parametry šablony už vyřešené a neexistují.

Řeší také další běžný problém: proč nemůžu použít proměnné k řešení názvů připojení služeb nebo prostředí? Prostředky jsou autorizované před spuštěním fáze, takže proměnné na úrovni fáze a úlohy nejsou k dispozici. Proměnné na úrovni kanálu se dají použít, ale jenom ty proměnné, které jsou explicitně zahrnuté v kanálu. Skupiny proměnných jsou samy o sobě prostředkem podléhajícím autorizaci, takže jejich údaje nejsou při kontrole autorizace prostředků rovněž k dispozici.

Žádost o agenta

Kdykoli Azure Pipelines potřebuje spustit úlohu, požádá fond o agenta. (Výjimkou jsou serverové úlohy , protože běží na samotném serveru Azure Pipelines.) Fondy agentů hostované Microsoftem a v místním prostředí fungují trochu jinak.

Žádosti o fond agentů hostovaných Microsoftem

Služba nejprve zkontroluje paralelní úlohy vaší organizace. Sečte všechny spuštěné úlohy na všech agentech hostovaných Microsoftem a porovnává je s počtem zakoupených paralelních úloh. Pokud nejsou k dispozici žádné paralelní sloty, úloha musí počkat, až se slot uvolní.

Jakmile je k dispozici paralelní slot, úloha se směruje na požadovaný typ agenta. Z koncepčního hlediska je fond hostovaný Microsoftem jedním obrovským globálním fondem počítačů. (Ve skutečnosti se jedná o mnoho různých fyzických fondů rozdělených podle zeměpisné oblasti a typu operačního systému.) Na základě požadovaného vmImage názvu fondu (v YAML) nebo fondu (v klasickém editoru) se vybere agent.

Výběr fondu

Všichni agenti ve fondu Microsoftu jsou nové virtuální počítače, na kterých ještě nebyly spuštěné žádné kanály. Po dokončení úlohy se virtuální počítač agenta zahodí.

Žádosti o fond agentů v místním prostředí

Podobně jako u fondu hostovaného Microsoftem služba nejprve zkontroluje paralelní úlohy vaší organizace. Sečte všechny spuštěné úlohy na všech agentech v místním prostředí a porovná je s počtem zakoupených paralelních úloh. Pokud nejsou k dispozici žádné paralelní sloty, úloha musí počkat, až se slot uvolní.

Jakmile je k dispozici paralelní slot, ve fondu v místním prostředí se zkontroluje kompatibilní agent. Agenti v místním prostředí nabízejí možnosti, což jsou řetězce označující, že je určitý software nainstalovaný nebo nakonfigurovaná nastavení. Kanál má požadavky, což jsou možnosti potřebné ke spuštění úlohy. Pokud není možné najít bezplatného agenta, jehož schopnosti odpovídají požadavkům kanálu, úloha bude dál čekat. 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 znovu používají od 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 například zahřívání mezipamětí nebo dostupnost většiny potvrzení v místním úložišti.

Příprava na spuštění úlohy

Jakmile agent přijme úlohu, musí provést určitou přípravu. Agent stáhne (a příště do mezipaměti) všechny úlohy potřebné ke spuštění úlohy. Na disku se vytvoří pracovní místo pro uložení zdrojového kódu, artefaktů a výstupů použitých při spuštění. Pak začne spouštět kroky.

Spuštění každého kroku

Kroky se spouští postupně, jeden po druhém. Před zahájením kroku je nutné dokončit (nebo přeskočit) všechny předchozí kroky.

Spuštění jednotlivých úloh

Kroky jsou implementovány úkoly. Samotné úlohy se implementují jako Node.js nebo powershellové skripty. Systém úloh směruje vstupy a výstupy do záložních skriptů. Poskytuje také některé běžné služby, jako je například 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 ho od prostředí, které zbylo v předchozích krocích. Kvůli tomuto modelu pro jednotlivé kroky se proměnné prostředí mezi jednotlivými kroky nezachovají. Úlohy a skripty však mají mechanismus pro komunikaci zpět s agentem: příkazy protokolování. Když úloha nebo skript zapíše příkaz protokolování, aby se standardně vypsal, agent provede požadovanou akci.

K dispozici je příkaz agenta pro vytvoření nových proměnných kanálu. Proměnné kanálu se v dalším kroku automaticky převedou na proměnné prostředí. Aby bylo možné nastavit novou proměnnou myVar s hodnotou myValue, skript to může udělat takto:

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

Sestava a shromažďování výsledků

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

Protokoly a výsledky proudí z agenta do služby

V průběhu kroků agent neustále odesílá výstupní řádky do služby. Proto se můžete podívat na živý kanál konzoly. Na konci každého kroku se celý výstup kroku nahraje také jako soubor protokolu. Protokoly je možné stáhnout po dokončení kanálu. Mezi další položky, které může agent nahrát, patří artefakty a výsledky testů. Ty jsou k dispozici i po dokončení kanálu.

Stav a podmínky

Agent sleduje úspěch nebo neúspěch každého kroku. Jakmile budou kroky úspěšné s problémy nebo selžou, stav úlohy se aktualizuje. Úloha vždy odráží "nejhorší" výsledek každého z jejích kroků: pokud krok selže, úloha selže také.

Před spuštěním kroku agent zkontroluje podmínku tohoto kroku a určí, jestli se má spustit. Ve výchozím nastavení se krok spustí pouze v případě, že je stav úlohy úspěšný nebo úspěšný s problémy. Mnoho úloh má kroky čištění, které je potřeba spustit bez ohledu na to, co se stalo, takže můžou zadat podmínku always(). Postup vyčištění může být také nastavený tak, aby běžel jenom při zrušení. Následující krok čištění nemůže uložit úlohu před selháním. Úlohy se po zadání chyby 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čila, server ji zruší. Pokusí se signalizovat agenta, aby se zastavil, a označí úlohu jako zrušenou. Na straně agenta to znamená zrušení všech zbývajících kroků a nahrání všech zbývajících výsledků.

Úlohy mají období odkladu označované jako vypršení časového limitu zrušení, během kterého se všechna zrušení dokončí. (Nezapomeňte, že kroky můžete označit tak, aby se spustily i při zrušení.) Pokud agent po vypršení časového limitu a zrušení neoznámí, že se práce zastavila, server označí úlohu jako selhání.

Vzhledem k tomu, že Azure Pipelines distribuuje práci do počítačů agentů, můžou agenti občas přestat reagovat na server. K tomu může dojít v případě, že hostitelský počítač agenta zmizí (výpadky napájení, virtuální počítač je vypnutý) nebo dojde k selhání sítě. Aby bylo možné tyto stavy rozpoznat, agent odesílá jednou za minutu zprávu prezenčního signálu, aby server věděl, že je stále v provozu. Pokud server pět po sobě jdoucích minut neobdrží prezenční signál, předpokládá se, že se agent nevrátí. Úloha se označí jako selhání, aby uživatel věděl, že by měl kanál opakovat.

Správa spuštění prostřednictvím rozhraní příkazového řádku

Pomocí Azure DevOps CLI můžete zobrazit seznam spuštění kanálu v projektu a zobrazit podrobnosti o konkrétním spuštění. Ve spuštění kanálu můžete také přidávat a odstraňovat značky.

Požadavky

  • Musíte mít nainstalované rozšíření Rozhraní příkazového řádku Azure DevOps, jak je popsáno v tématu Začínáme s Rozhraním příkazového řádku Azure DevOps.
  • Přihlaste se k Azure DevOps pomocí az login.
  • Pro příklady v tomto článku nastavte výchozí organizaci pomocí az devops configure --defaults organization=YourOrganizationURL.

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

Pomocí příkazu az pipelines runs list zobrazte seznam spuštění kanálu ve vašem projektu. Pokud chcete začít, přečtěte si téma Začínáme s Rozhraním příkazového řádku Azure DevOps.

az pipelines runs list [--branch]
                       [--org]
                       [--pipeline-ids]
                       [--project]
                       [--query-order {FinishTimeAsc, FinishTimeDesc, QueueTimeAsc, QueueTimeDesc, StartTimeAsc, StartTimeDesc}]
                       [--reason {all, batchedCI, buildCompletion, checkInShelveset, individualCI, manual, pullRequest, schedule, triggered, userCreated, validateShelveset}]
                       [--requested-for]
                       [--result {canceled, failed, none, partiallySucceeded, succeeded}]
                       [--status {all, cancelling, completed, inProgress, none, notStarted, postponed}]
                       [--tags]
                       [--top]

Volitelné parametry

  • větev: Filtrujte podle sestavení pro tuto větev.
  • org: Adresa URL organizace Azure DevOps. Výchozí organizaci můžete nakonfigurovat pomocí příkazu az devops configure -d organization=ORG_URL. Vyžaduje se, pokud není nakonfigurovaný jako výchozí nebo vyzvednut pomocí git config. Příklad: --org https://dev.azure.com/MyOrganizationName/.
  • id kanálu: ID definic oddělených mezerami, pro které se mají vypsat sestavení.
  • project: Název nebo ID projektu. Výchozí projekt můžete nakonfigurovat pomocí příkazu az devops configure -d project=NAME_OR_ID. Vyžaduje se, pokud není nakonfigurovaný jako výchozí nebo vyzvednut pomocí git config.
  • pořadí dotazů: Definujte pořadí, ve kterém jsou uvedena spuštění kanálu. Akceptované hodnoty jsou FinishTimeAsc, FinishTimeDesc, QueueTimeAsc, QueueTimeDesc, StartTimeAsc a StartTimeDesc.
  • reason: Vypisujte jenom sestavení z tohoto zadaného důvodu. Akceptované hodnoty jsou batchedCI, buildCompletion, checkInShelveset, individualCI, manual, pullRequest, schedule, triggered, userCreated a validateShelveset.
  • requested-for: Omezení na sestavení požadovaná pro zadaného uživatele nebo skupinu.
  • result: Omezení na sestavení se zadaným výsledkem. Akceptované hodnoty jsou canceled, failed, none, partiallySucceeded a succeeded.
  • status: Omezení na sestavení se zadaným stavem. Akceptované hodnoty jsou všechny, cancelling, completed, inProgress, none, notStarted a odložené.
  • tags: Omezení na sestavení s každou ze zadaných značek. Oddělené mezerami.
  • top: Maximální počet sestavení k zobrazení seznamu.

Příklad

Následující příkaz vypíše první tři spuštění kanálu, která mají stav Dokončeno a výsledek je úspěšný, 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 ve vašem projektu. Pokud chcete začít, přečtěte si téma Začínáme s Rozhraním příkazového řádku Azure DevOps.

az pipelines runs show --id
                       [--open]
                       [--org]
                       [--project]

Parametry

  • id: Povinné. ID spuštění kanálu
  • open: Volitelné. Otevře stránku výsledků sestavení ve webovém prohlížeči.
  • org: Adresa URL organizace Azure DevOps. Výchozí organizaci můžete nakonfigurovat pomocí příkazu az devops configure -d organization=ORG_URL. Vyžaduje se, pokud není nakonfigurovaný jako výchozí nebo vyzvednut pomocí git config. Příklad: --org https://dev.azure.com/MyOrganizationName/.
  • project: Název nebo ID projektu. Výchozí projekt můžete nakonfigurovat pomocí příkazu az devops configure -d project=NAME_OR_ID. Vyžaduje se, pokud není nakonfigurovaný jako výchozí nebo vyzvednut pomocí git config.

Příklad

Následující příkaz zobrazí podrobnosti o spuštění kanálu s ID 123 a vrátí výsledky ve formátu tabulky. Otevře se také webový prohlížeč na stránce s výsledky sestavení.

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 ve vašem projektu pomocí příkazu az pipelines runs tag add . Pokud chcete začít, přečtěte si téma Začínáme s Rozhraním příkazového řádku Azure DevOps.

az pipelines runs tag add --run-id
                          --tags
                          [--org]
                          [--project]

Parametry

  • run-id: Povinné. ID spuštění kanálu
  • tags: Povinné. Značky, které se mají přidat do spuštění kanálu (hodnoty oddělené čárkami)
  • org: Adresa URL organizace Azure DevOps. Výchozí organizaci můžete nakonfigurovat pomocí příkazu az devops configure -d organization=ORG_URL. Vyžaduje se, pokud není nakonfigurovaný jako výchozí nebo vyzvednut pomocí git config. Příklad: --org https://dev.azure.com/MyOrganizationName/.
  • project: Název nebo ID projektu. Výchozí projekt můžete nakonfigurovat pomocí příkazu az devops configure -d project=NAME_OR_ID. Vyžaduje se, pokud není nakonfigurovaný jako výchozí nebo vyzvednut pomocí git config.

Příklad

Následující příkaz přidá do spuštění kanálu značku YAML 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

Vytvořte seznam značek pro spuštění kanálu ve vašem projektu pomocí příkazu az pipelines runs tag list . Pokud chcete začít, přečtěte si téma Začínáme s Rozhraním příkazového řádku Azure DevOps.

az pipelines runs tag list --run-id
                           [--org]
                           [--project]

Parametry

  • run-id: Povinné. ID spuštění kanálu
  • org: Adresa URL organizace Azure DevOps. Výchozí organizaci můžete nakonfigurovat pomocí příkazu az devops configure -d organization=ORG_URL. Vyžaduje se, pokud není nakonfigurovaný jako výchozí nebo vyzvednut pomocí git config. Příklad: --org https://dev.azure.com/MyOrganizationName/.
  • project: Název nebo ID projektu. Výchozí projekt můžete nakonfigurovat pomocí az devops configure -d project=NAME_OR_IDpříkazu . Vyžaduje se, pokud není nakonfigurováno jako výchozí nebo převzato pomocí git config.

Příklad

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 ze spuštění kanálu v projektu pomocí příkazu az pipelines run tag delete . Pokud chcete začít, přečtěte si téma Začínáme s Rozhraním příkazového řádku Azure DevOps.

az pipelines runs tag delete --run-id
                             --tag
                             [--org]
                             [--project]

Parametry

  • run-id: Povinné. ID spuštění kanálu.
  • tag: Povinné. Značka, která se má odstranit ze spuštění kanálu.
  • org: Adresa URL organizace Azure DevOps. Výchozí organizaci můžete nakonfigurovat pomocí příkazu az devops configure -d organization=ORG_URL. Vyžaduje se, pokud není nakonfigurováno jako výchozí nebo převzato pomocí git config. Příklad: --org https://dev.azure.com/MyOrganizationName/.
  • project: Název nebo ID projektu. Výchozí projekt můžete nakonfigurovat pomocí az devops configure -d project=NAME_OR_IDpříkazu . Vyžaduje se, pokud není nakonfigurováno jako výchozí nebo převzato pomocí git config.

Příklad

Následující příkaz odstraní značku YAML ze spuštění kanálu s ID 123.

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