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).
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:
- Zpracování kanálu
- Vyžádání jednoho nebo více agentů ke spouštění úloh
- Předání úloh agentům a shromáždění výsledků
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
Pokud chcete kanál převést na spuštění, azure Pipelines provede několik kroků v tomto pořadí:
- Nejprve rozbalte šablony a vyhodnoťte výrazy šablon.
- Dále vyhodnoťte závislosti na úrovni fáze a vyberte první fáze, které se mají spustit.
- U každé fáze vybrané ke spuštění se stanou dvě věci:
- Všechny prostředky použité ve všech úlohách se shromáždí a ověří, aby se autorizace spustila.
- Vyhodnoťte závislosti na úrovni úlohy a vyberte první úlohy, které se mají spustit.
- Pro každou vybranou úlohu, která se má spustit, rozbalte více konfigurací (
strategy: matrix
nebostrategy: parallel
v JAZYCE YAML) do několika úloh modulu runtime. - Pro každou úlohu modulu runtime vyhodnoťte podmínky a rozhodněte se, jestli je tato úloha způsobilá ke spuštění.
- 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š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.
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.
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_ID
pří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_ID
pří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
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro