Triggers gebruiken om te bepalen wanneer uw pijplijn wordt uitgevoerd

Voltooid

U hebt nu een werkende pijplijn waarmee uw Bicep-bestand wordt geïmplementeerd in uw Azure-omgeving. Wanneer u het bestand wijzigt, moet u de pijplijn echter handmatig uitvoeren. In deze les leert u hoe u uw pijplijn kunt activeren om automatisch uit te voeren wanneer uw Bicep-code wordt gewijzigd.

Notitie

De opdrachten in deze les worden weergegeven om concepten te illustreren. Voer de opdrachten nog niet uit. U oefent wat u hier binnenkort leert.

Wat is een pijplijntrigger?

Een pijplijntrigger is een voorwaarde waarmee uw pijplijn automatisch wordt uitgevoerd op basis van regels die u maakt. U kunt triggers instellen om uw pijplijn met geplande intervallen uit te voeren. U kunt ook triggers instellen om uw pijplijn uit te voeren telkens wanneer een bestand in uw opslagplaats wordt gewijzigd. U kunt de tweede optie kiezen omdat het een goed idee is om al uw tests en implementatiestappen uit te voeren telkens wanneer iemand uw code wijzigt.

Als u geen automatische trigger gebruikt, kan iemand een wijziging aanbrengen in een Bicep-bestand en het zelfs doorvoeren en naar de opslagplaats pushen. Maar als ze vergeten de pijplijn uit te voeren, is er een verschil tussen de resourcedefinities in uw Bicep-bestand en de resources die zijn geïmplementeerd in uw Azure-omgeving. Stel dat er nog een paar doorvoeringen en pushbewerkingen worden gemaakt, maar niet worden geïmplementeerd. Als iemand een fout of onjuiste configuratie introduceert in het Bicep-bestand in een van deze wijzigingen, kan het lastig zijn om de fout op te sporen tussen de meerdere doorvoeringen die later tegelijk worden geïmplementeerd. Na enige tijd vertrouwt u niet dat uw Bicep-code uw infrastructuur echt vertegenwoordigt en de waarde ervan is geëodeerd.

Wanneer u uw pijplijn zo instelt dat deze wordt uitgevoerd telkens wanneer u uw bestanden bijwerkt, wordt uw pijplijn uitgevoerd zodra uw wijzigingen worden gepusht. U krijgt direct feedback over de geldigheid van uw wijziging en u kunt er zeker van zijn dat uw productieomgeving altijd up-to-date is.

Vertakkingstriggers

Een veelvoorkomend type trigger is een vertakkingstrigger, ook wel een continue integratietrigger of CI-trigger genoemd. Wanneer u een vertakkingstrigger gebruikt, wordt de pijplijn uitgevoerd telkens wanneer u een wijziging aanbrengt in een specifieke vertakking. Als u een wijziging doorvoert en pusht naar een andere vertakking, wordt de pijplijn niet geactiveerd en wordt deze niet uitgevoerd. Het is gebruikelijk om dit type trigger te gebruiken voor uw standaard- of hoofdbranch , met deze code:

trigger:
- main

Activeren wanneer meerdere vertakkingen veranderen

U kunt triggers instellen om uw pijplijn uit te voeren op een specifieke vertakking of in sets vertakkingen. Stel dat u releasebranches maakt die de code bevatten die u implementeert voor een specifieke release van uw project. U kunt vertakkingsnamen gebruiken, zoals release/v1, release/v2, enzovoort. U wilt uw pijplijn uitvoeren wanneer uw code verandert in een vertakking die begint met de naamrelease /. U kunt de include eigenschap gebruiken met een * jokerteken:

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

U kunt ook specifieke vertakkingen uitsluiten. Stel dat u met teamleden samenwerkt aan uw project. Uw collega's maken functiebranches om hun ideeën in Bicep-bestanden uit te proberen. Alle functievertakkingen hebben namen zoals functie/add-database, functie/betere prestaties, enzovoort. U wilt uw pijplijn automatisch uitvoeren op alle vertakkingen, met uitzondering van de functiebranches die uw collega's maken. Door de exclude eigenschap te gebruiken, zorgt u ervoor dat de pijplijn niet automatisch wordt geactiveerd voor wijzigingen in functiebranches:

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

Tip

Let op de aanhalingstekens rond het jokerteken in het include filter. Voor de YAML-bestandsindeling moet u één * teken tussen aanhalingstekens plaatsen wanneer u deze als jokerteken gebruikt.

Padfilters

Soms hebt u bestanden in uw opslagplaats die niet zijn gerelateerd aan uw implementatie. U hebt bijvoorbeeld een implementatiemap in uw opslagplaats met uw Bicep-code en een afzonderlijke docs-map die uw documentatiebestanden bevat. U wilt uw pijplijn activeren wanneer iemand een wijziging aanbrengt in een van de Bicep-bestanden in de implementatiemap , maar u wilt de pijplijn niet activeren als iemand alleen een documentatiebestand wijzigt. Als u een trigger wilt instellen om te reageren op wijzigingen in een specifieke map in uw opslagplaats, kunt u een padfilter gebruiken:

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

Als iemand een wijziging doorvoert die alleen een documentatiebestand bijwerkt, wordt de pijplijn niet uitgevoerd. Maar als iemand een Bicep-bestand wijzigt of zelfs als hij een Bicep-bestand wijzigt naast een documentatiebestand, wordt de pijplijn uitgevoerd door de trigger.

Uw pijplijn plannen om automatisch uit te voeren

U kunt uw pijplijn uitvoeren volgens een vast schema en niet als reactie op een bestandswijziging. U kunt bijvoorbeeld elke ochtend een nachtelijke release van uw Bicep-code uitvoeren of automatisch een testomgeving implementeren. Gebruik het schedules trefwoord in plaats van triggeren stel de frequentie in met behulp van een cron-expressie:

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

Notitie

Een cron-expressie is een speciaal opgemaakte reeks tekens waarmee wordt ingesteld hoe vaak een gebeurtenis plaatsvindt. In dit voorbeeld 0 0 * * * betekent dit dat elke dag om middernacht UTC wordt uitgevoerd.

U kunt ook de vertakking van uw opslagplaats instellen voor gebruik in de geplande gebeurtenis. Wanneer de pijplijn wordt gestart, wordt de meest recente versie van de code van de vertakking gebruikt die u in de planning hebt ingesteld.

Meerdere triggers gebruiken

U kunt triggers en planningen combineren, zoals in dit voorbeeld:

trigger:
- main

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

Wanneer u een vertakkingstrigger en een geplande trigger in dezelfde pijplijn maakt, wordt de pijplijn uitgevoerd telkens wanneer een bestand wordt gewijzigd in de vertakking die is ingesteld in de trigger en volgens de planning die u instelt. In dit voorbeeld wordt de pijplijn elke dag uitgevoerd om middernacht UTC en ook wanneer een wijziging naar de hoofdbranch wordt gepusht.

Tip

Het is een goed idee om triggers in te stellen voor elke pijplijn. Als u standaard geen triggers instelt, wordt uw pijplijn automatisch uitgevoerd wanneer bestanden in een vertakking worden gewijzigd. Dit is vaak niet wat u wilt.

Gelijktijdigheid beheren

Met Azure Pipelines kunnen standaard meerdere exemplaren van uw pijplijn tegelijkertijd worden uitgevoerd. Dit kan gebeuren wanneer u binnen een korte tijd meerdere doorvoeringen naar een vertakking maakt.

In sommige gevallen is het niet een probleem om meerdere gelijktijdige uitvoeringen van uw pijplijn uit te voeren. Maar wanneer u met implementatiepijplijnen werkt, kan het lastig zijn om ervoor te zorgen dat uw pijplijnuitvoeringen uw Azure-resources of -configuratie niet overschrijven op manieren die u niet verwacht.

Als u deze problemen wilt voorkomen, kunt u het batch trefwoord gebruiken met een trigger, zoals in dit voorbeeld:

trigger:
  batch: true
  branches:
    include:
    - main

Wanneer uw trigger wordt geactiveerd, zorgt Azure Pipelines ervoor dat deze wacht totdat een actieve pijplijnuitvoering is voltooid. Vervolgens wordt er een nieuwe uitvoering gestart met alle wijzigingen die sinds de laatste uitvoering zijn verzameld.