Řízení spuštění kanálu pomocí triggerů

Dokončeno

Teď máte funkční kanál, který nasadí váš soubor Bicep do vašeho prostředí Azure. Pokaždé, když ale změníte soubor, musíte kanál spustit ručně. V této lekci se dozvíte, jak aktivovat spuštění kanálu automaticky při každé změně kódu Bicep.

Poznámka:

Příkazy v této lekci jsou znázorněny pro ilustraci konceptů. Zatím nespouštět příkazy. Brzy si procvičíte, co se tady naučíte.

Co je trigger kanálu?

Aktivační událost kanálu je podmínka, která při splnění automaticky spouští kanál na základě pravidel, která vytvoříte. Triggery můžete nastavit tak, aby se kanál spouštějí v naplánovaných intervalech. Můžete také nastavit triggery pro spuštění kanálu při každé změně souboru v úložišti. Druhou možnost můžete zvolit, protože je vhodné spustit všechny testy a kroky nasazení pokaždé, když někdo změní váš kód.

Pokud nepoužíváte automatickou aktivační událost, může někdo provést změnu souboru Bicep a dokonce ho potvrdit a odeslat do úložiště. Pokud ale zapomene spustit kanál, bude mezi definicemi prostředků v souboru Bicep a prostředky nasazenými do vašeho prostředí Azure rozdíl. Předpokládejme, že se provede několik dalších potvrzení a nabízených oznámení, ale nenasadí se. Pokud někdo v souboru Bicep v některé z těchto změn zavádí chybu nebo špatnou konfiguraci, může být obtížné zjistit chybu mezi několika potvrzeními, která jsou později nasazena najednou. Po nějaké době nebudete důvěřovat tomu, že váš kód Bicep skutečně představuje vaši infrastrukturu a její hodnota je narušena.

Když nastavíte kanál tak, aby běžel při každé aktualizaci souborů, spustí se kanál v okamžiku, kdy se změny nasdílí. Získáte okamžitou zpětnou vazbu ohledně platnosti změny a můžete mít jistotu, že vaše produkční prostředí je vždy aktuální.

Triggery větví

Běžným typem triggeru je trigger větve, označovaný také jako trigger kontinuální integrace nebo trigger CI. Když použijete trigger větve, spustí se kanál pokaždé, když provedete změnu konkrétní větve. Pokud potvrdíte a nasdílíte změnu do jiné větve, kanál se neaktivuje a nespustí se. Tento typ triggeru se běžně používá pro výchozí nebo hlavní větev s tímto kódem:

trigger:
- main

Aktivace při změně více větví

Můžete nastavit triggery pro spuštění kanálu v konkrétní větvi nebo v sadách větví. Předpokládejme například, že vytvoříte větve vydané verze, které obsahují kód, který nasadíte pro konkrétní verzi projektu. Můžete použít názvy větví, jako jsou release/v1, release/v2 atd. Kanál chcete spustit pokaždé, když se váš kód změní ve větvi, která začíná vydáním názvu /. Vlastnost můžete použít include se zástupným znakem * :

trigger:
  branches:
    include:
    - main
    - release/*

Můžete také vyloučit konkrétní větve. Předpokládejme, že spolupracujete s členy týmu na projektu. Vaši kolegové vytvářejí větve funkcí, aby si vyzkoušeli své nápady v souborech Bicep. Všechny větve funkcí mají názvy, jako jsou funkce, doplňková databáze, funkce/ zlepšení výkonu atd. Kanál chcete spouštět automaticky ve všech větvích s výjimkou větví funkcí, které vaši kolegové vytvářejí. exclude Pomocí vlastnosti zajistíte, že se kanál neaktivuje automaticky kvůli změnám větví funkcí:

trigger:
  branches:
    include:
    - '*'
    exclude:
    - feature/*

Tip

Všimněte si uvozovek kolem zástupné znaky ve include filtru. Formát souboru YAML vyžaduje, abyste při použití jako zástupný znak ohraničil jeden * znak do uvozovek.

Filtry cest

Někdy máte v úložišti soubory, které nesouvisí s vaším nasazením. Můžete mít například složku pro nasazení ve vašem úložišti, která obsahuje kód Bicep, a samostatnou složku dokumentace , která obsahuje vaše soubory dokumentace. Kanál chcete aktivovat, když někdo provede změnu některého ze souborů Bicep ve složce nasazení , ale nechcete kanál aktivovat, pokud někdo změní jenom soubor dokumentace. Pokud chcete nastavit trigger pro reakci na změny v konkrétní složce v úložišti, můžete použít filtr cesty:

trigger:
  branches:
    include:
    - main
  paths:
    exclude:
    - docs
    include:
    - deploy

Pokud někdo potvrdí změnu, která aktualizuje jenom soubor dokumentace, kanál se nespustí. Pokud ale někdo změní soubor Bicep, nebo i když kromě souboru dokumentace změní i soubor Bicep, trigger kanál spustí.

Naplánování automatického spuštění kanálu

Kanál můžete spustit podle nastaveného plánu, a ne v reakci na změnu souboru. Můžete například spustit noční vydání kódu Bicep nebo automaticky nasadit testovací prostředí každé ráno. Použijte místo klíčového schedulestriggerslova a nastavte frekvenci pomocí výrazu cron:

schedules:
- cron: "0 0 * * *"
  displayName: Daily environment restore
  branches:
    include:
    - main

Poznámka:

Výraz cron je speciálně naformátovaná posloupnost znaků, která nastavuje, jak často se stane událost. V tomto příkladu znamená spuštění 0 0 * * * každý den o půlnoci UTC.

Větev úložiště můžete také nastavit tak, aby se používala v naplánované události. Když se kanál spustí, použije nejnovější verzi kódu z větve, kterou jste nastavili v plánu.

Použití více aktivačních událostí

Triggery a plány můžete kombinovat, například v tomto příkladu:

trigger:
- main

schedules:
- cron: "0 0 * * *"
  displayName: Deploy test environment
  branches:
    include:
    - main

Když ve stejném kanálu vytvoříte trigger větve a naplánovanou aktivační událost, kanál se spustí při každé změně souboru ve větvi, která je nastavená v triggeru , a podle nastaveného plánu. V tomto příkladu se kanál spouští každý den o půlnoci UTC a také pokaždé, když se do hlavní větve odešle změna.

Tip

Je vhodné nastavit triggery pro každý kanál. Pokud triggery nenastavíte, kanál se ve výchozím nastavení automaticky spustí při každé změně souboru v libovolné větvi, což často není to, co potřebujete.

Řízení souběžnosti

Azure Pipelines ve výchozím nastavení umožňuje souběžné spouštění více instancí kanálu. K tomu může dojít, když provedete několik potvrzení do větve během krátké doby.

V některých situacích není problém s několika souběžnými spuštěními kanálu. Když ale pracujete s kanály nasazení, může být náročné zajistit, aby vaše spuštění kanálu nepřepsala prostředky Azure ani konfiguraci způsobem, který neočekáváte.

Pokud se chcete těmto problémům vyhnout, můžete klíčové slovo použít batch s triggerem, například v tomto příkladu:

trigger:
  batch: true
  branches:
    include:
    - main

Když se trigger aktivuje, Azure Pipelines zajistí, že počká na dokončení jakéhokoli aktivního spuštění kanálu. Potom spustí nové spuštění se všemi změnami, které se nashromážděly od posledního spuštění.