Använda utlösare för att styra när pipelinen körs

Slutförd

Nu har du en fungerande pipeline som distribuerar Bicep-filen till din Azure-miljö. Men när du ändrar filen måste du köra pipelinen manuellt. I den här lektionen får du lära dig hur du utlöser pipelinen så att den körs automatiskt när din Bicep-kod ändras.

Kommentar

Kommandona i den här enheten visas för att illustrera begrepp. Kör inte kommandona än. Du kommer att öva på det du lär dig här snart.

Vad är en pipelineutlösare?

En pipelineutlösare är ett villkor som när den uppfylls automatiskt kör din pipeline baserat på regler som du skapar. Du kan ange att utlösare ska köra din pipeline med schemalagda intervall. Du kan också ställa in utlösare för att köra pipelinen varje gång en fil på lagringsplatsen ändras. Du kan välja det andra alternativet eftersom det är en bra idé att köra alla dina tester och distributionssteg varje gång någon ändrar koden.

Om du inte använder en automatisk utlösare kan någon göra en ändring i en Bicep-fil och till och med checka in den och skicka den till lagringsplatsen. Men om de glömmer att köra pipelinen kommer det att finnas en skillnad mellan resursdefinitionerna i Bicep-filen och de resurser som distribueras till din Azure-miljö. Anta att ytterligare ett par incheckningar och push-överföringar görs men inte distribueras. Om någon introducerar ett fel eller en felkonfiguration i Bicep-filen i någon av dessa ändringar kan det vara svårt att spåra felet bland de flera incheckningar som senare distribueras samtidigt. Efter ett tag litar du inte på att din Bicep-kod verkligen representerar din infrastruktur, och dess värde urholkas.

När du konfigurerar pipelinen så att den körs varje gång du uppdaterar dina filer, börjar pipelinen köras så fort ändringarna skickas. Du får omedelbar feedback om ändringens giltighet och kan vara säker på att produktionsmiljön alltid är uppdaterad.

Grenutlösare

En vanlig typ av utlösare är en grenutlösare, även kallad en kontinuerlig integrationsutlösare eller CI-utlösare. När du använder en grenutlösare körs pipelinen varje gång du gör en ändring i en viss gren. Om du checkar in och push-överför en ändring till en annan gren utlöses inte pipelinen och den körs inte. Det är vanligt att använda den här typen av utlösare mot din standard- eller huvudgren med den här koden:

trigger:
- main

Utlösare när flera grenar ändras

Du kan konfigurera utlösare för att köra din pipeline på en viss gren eller på uppsättningar med grenar. Anta till exempel att du skapar versionsgrenar som innehåller den kod som du distribuerar för en specifik version av projektet. Du kan använda grennamn som release/v1, release/v2 och så vidare. Du vill köra pipelinen när koden ändras på en gren som börjar med namnversionen /. Du kan använda egenskapen include med ett * jokertecken:

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

Du kan också exkludera specifika grenar. Anta att du samarbetar med teammedlemmar i projektet. Dina kollegor skapar funktionsgrenar för att testa sina idéer i Bicep-filer. Alla funktionsgrenar har namn som funktion/tilläggsdatabas, funktion/förbättra prestanda och så vidare. Du vill köra din pipeline automatiskt på alla grenar förutom de funktionsgrenar som dina kollegor skapar. Genom att använda egenskapen exclude ser du till att pipelinen inte utlöses automatiskt för ändringar i funktionsgrenar:

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

Dricks

Observera citattecknen runt jokertecknet i include filtret. YAML-filformatet kräver att du omger ett enskilt * tecken inom citattecken när du använder det som jokertecken.

Sökvägsfilter

Ibland har du filer på lagringsplatsen som inte är relaterade till distributionen. Du kan till exempel ha en distribuerad mapp på lagringsplatsen som innehåller din Bicep-kod och en separat dokumentmapp som innehåller dina dokumentationsfiler . Du vill utlösa din pipeline när någon gör en ändring i någon av Bicep-filerna i distributionsmappen, men du vill inte utlösa pipelinen om någon bara ändrar en dokumentationsfil. Om du vill konfigurera en utlösare för att svara på ändringar i en specifik mapp på lagringsplatsen kan du använda ett sökvägsfilter:

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

Om någon genomför en ändring som endast uppdaterar en dokumentationsfil körs inte pipelinen. Men om någon ändrar en Bicep-fil, eller även om de ändrar en Bicep-fil utöver en dokumentationsfil, kör utlösaren pipelinen.

Schemalägg pipelinen så att den körs automatiskt

Du kan köra pipelinen enligt ett angivet schema och inte som svar på en filändring. Du kan till exempel köra en nattlig version av din Bicep-kod eller automatiskt distribuera en testmiljö varje morgon. Använd nyckelordet schedules i stället för triggeroch ange frekvensen med hjälp av ett cron-uttryck:

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

Kommentar

Ett cron-uttryck är en specialformaterad sekvens med tecken som anger hur ofta en händelse ska inträffa. I det här exemplet 0 0 * * * innebär det att köras varje dag vid midnatt UTC.

Du kan också ange den gren av lagringsplatsen som ska användas i den schemalagda händelsen. När pipelinen startar använder den den senaste versionen av koden från den gren som du angav i schemat.

Använda flera utlösare

Du kan kombinera utlösare och scheman, som i det här exemplet:

trigger:
- main

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

När du skapar en grenutlösare och en schemalagd utlösare i samma pipeline körs pipelinen varje gång en fil ändras på den gren som anges i utlösaren och enligt det schema som du anger. I det här exemplet körs pipelinen varje dag vid midnatt UTC och även när en ändring skickas till huvudgrenen.

Dricks

Det är en bra idé att ange utlösare för varje pipeline. Om du inte anger utlösare körs pipelinen som standard automatiskt när en fil ändras på en gren, vilket ofta inte är vad du vill.

Samtidighetskontroll

Som standard tillåter Azure Pipelines att flera instanser av din pipeline körs samtidigt. Detta kan inträffa när du gör flera incheckningar till en gren inom en kort tid.

I vissa situationer är det inte ett problem att ha flera samtidiga körningar av pipelinen. Men när du arbetar med distributionspipelines kan det vara svårt att se till att dina pipelinekörningar inte skriver över dina Azure-resurser eller din konfiguration på ett sätt som du inte förväntar dig.

För att undvika dessa problem kan du använda nyckelordet batch med en utlösare, som i det här exemplet:

trigger:
  batch: true
  branches:
    include:
    - main

När utlösaren utlöses ser Azure Pipelines till att den väntar på att alla aktiva pipelinekörningar ska slutföras. Sedan startar den en ny körning med alla ändringar som har ackumulerats sedan den senaste körningen.