Eén pijplijn na een andere activeren
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
- YAML-pijplijnen
- klassieke pijplijnen
Grote producten hebben verschillende onderdelen die van elkaar afhankelijk zijn. Deze onderdelen zijn vaak onafhankelijk gebouwd. Wanneer een upstream-onderdeel (bijvoorbeeld een bibliotheek) verandert, moeten de downstreamafhankelijkheden opnieuw worden opgebouwd en opnieuw worden gevalideerd.
In dergelijke situaties voegt u een pijplijntrigger toe om uw pijplijn uit te voeren na de succesvolle voltooiing van de activerende pijplijn.
Notitie
Eerder hebt u mogelijk naar de klassieke editor voor uw YAML-pijplijn genavigeerd en triggers voor het voltooien van de build geconfigureerd in de gebruikersinterface. Hoewel dat model nog steeds werkt, wordt het niet meer aanbevolen. De aanbevolen methode is het specificeren van pijplijntriggers rechtstreeks in het YAML-bestand. Triggers voor voltooiing van build zoals gedefinieerd in de klassieke editor hebben verschillende nadelen, die nu zijn opgelost in pijplijntriggers. Er is bijvoorbeeld geen manier om een pijplijn te activeren op dezelfde branche als de pijplijn die de triggering initieert, met behulp van triggers die de voltooiing van de build aangeven.
Triggers die zijn gedefinieerd met behulp van de gebruikersinterface voor pijplijninstellingen hebben voorrang op YAML-triggers. Raadpleeg UI-instellingen voor het overschrijven van geplande YAML-triggersals u geplande triggers uit een YAML-pijplijn wilt verwijderen.
Pijplijnresourcetriggers configureren
Als u een pijplijn wilt activeren na voltooiing van een andere pijplijn, configureert u een pijplijnresource trigger.
In het volgende voorbeeld wordt een trigger voor een pijplijnresource geconfigureerd, zodat een pijplijn genaamd app-ci
wordt uitgevoerd nadat elke uitvoering van de pijplijn security-lib-ci
is voltooid.
In dit voorbeeld zijn de volgende twee pijplijnen.
security-lib-ci
: deze pijplijn wordt eerst uitgevoerd.# security-lib-ci YAML pipeline steps: - bash: echo "The security-lib-ci pipeline runs first"
app-ci
: deze pijplijn heeft een pijplijnresourcetrigger waarmee deapp-ci
-pijplijn automatisch wordt uitgevoerd wanneer een uitvoering van desecurity-lib-ci
pijplijn is voltooid.# app-ci YAML pipeline # We are setting up a pipeline resource that references the security-lib-ci # pipeline and setting up a pipeline completion trigger so that our app-ci # pipeline runs when a run of the security-lib-ci pipeline completes resources: pipelines: - pipeline: securitylib # Name of the pipeline resource. source: security-lib-ci # The name of the pipeline referenced by this pipeline resource. project: FabrikamProject # Required only if the source pipeline is in another project trigger: true # Run app-ci pipeline when any run of security-lib-ci completes steps: - bash: echo "app-ci runs after security-lib-ci completes"
-
- pipeline: securitylib
geeft de naam van de pijplijnresource op. Gebruik het label dat hier is gedefinieerd wanneer u verwijst naar de pijplijnresource uit andere onderdelen van de pijplijn, zoals bij het gebruik van pijplijnresourcevariabelen of het downloaden van artefacten. -
source: security-lib-ci
geeft de naam op van de pijplijn waarnaar wordt verwezen door deze pijplijnresource. U kunt de naam van een pijplijn ophalen uit de Azure DevOps-portal op verschillende plaatsen, zoals de landingspagina Pipelines. Pijplijnen worden standaard benoemd naar de opslagplaats die de pijplijn bevat. Zie Pijplijninstellingenom de naam van een pijplijn bij te werken. Als de pijplijn zich in een map bevindt, neemt u de mapnaam op, inclusief de voorloop-\
, bijvoorbeeld\security pipelines\security-lib-ci
. -
project: FabrikamProject
: als de triggerpijplijn zich in een ander Azure DevOps-project bevindt, moet u de projectnaam opgeven. Deze eigenschap is optioneel als zowel de bronpijplijn als de geactiveerde pijplijn zich in hetzelfde project bevinden. Als u deze waarde opgeeft en uw pijplijn niet wordt geactiveerd, raadpleegt u de opmerking aan het einde van deze sectie. -
trigger: true
: gebruik deze syntaxis om de pijplijn te activeren wanneer een versie van de bronpijplijn is voltooid. Zie de volgende secties in dit artikel om te leren hoe u kunt filteren welke versies van de bronpijplijn voltooiing een uitvoering zullen activeren. Wanneer filters zijn opgegeven, moet de bronpijplijn aan alle filters voldoen om een uitvoering te activeren.
Als de triggerpijplijn en de geactiveerde pijplijn dezelfde repository gebruiken, zullen beide pijplijnen draaien met dezelfde commit wanneer de ene de andere triggert. Dit is handig als uw eerste pijplijn de code bouwt en de tweede pijplijn deze test. Als de twee pijplijnen echter verschillende opslagplaatsen gebruiken, zal de geactiveerde pijplijn de versie van de code gebruiken in de vertakking die is opgegeven door de Default branch for manual and scheduled builds
-instelling, zoals beschreven in Overwegingen voor vertakkingen bij het voltooien van pijplijntriggers.
Notitie
In sommige scenario's bevat de standaardvertakking voor handmatige builds en geplande builds geen refs/heads
voorvoegsel. De standaardbranch kan bijvoorbeeld worden ingesteld op main
in plaats van op refs/heads/main
. In dit scenario werkt een trigger uit een ander project niet. Als u problemen ondervindt wanneer u project
instelt op een andere waarde dan die van de doelpijplijn, kunt u de standaardbranch bijwerken om refs/heads
op te nemen door de waarde aan te passen naar een andere tak en deze vervolgens weer terug te veranderen naar de standaardbranch die u wilt gebruiken.
Het configureren van triggers voor pijplijnvoltooiing wordt niet ondersteund in YAML-sjablonen. U kunt nog steeds pijplijnbronnen definiëren in sjablonen.
Vertakkingsfilters
U kunt eventueel de vertakkingen opgeven die moeten worden opgenomen of uitgesloten bij het configureren van de trigger. Als u vertakkingsfilters opgeeft, wordt er een nieuwe pijplijn geactiveerd wanneer een bronpijplijnuitvoering is voltooid die overeenkomt met de vertakkingsfilters. In het volgende voorbeeld wordt de app-ci
-pijplijn uitgevoerd als de security-lib-ci
is voltooid op een releases/*
-tak, met uitzondering van releases/old*
.
# app-ci YAML pipeline
resources:
pipelines:
- pipeline: securitylib
source: security-lib-ci
trigger:
branches:
include:
- releases/*
exclude:
- releases/old*
Als u de kinderpijplijn wilt activeren voor verschillende vertakkingen waarvoor de ouderpijplijn wordt geactiveerd, moet u alle vertakkingsfilters opnemen waarvoor de ouderpijplijn wordt geactiveerd. In het volgende voorbeeld wordt de app-ci
-pijplijn uitgevoerd als de security-lib-ci
is voltooid op een releases/*
vertakking of hoofdbranch, met uitzondering van releases/old*
.
# app-ci YAML pipeline
resources:
pipelines:
- pipeline: securitylib
source: security-lib-ci
trigger:
branches:
include:
- releases/*
- main
exclude:
- releases/old*
Notitie
Als uw vertakkingsfilters niet werken, probeer dan het voorvoegsel refs/heads/
te gebruiken. Gebruik bijvoorbeeld refs/heads/releases/old*
in plaats van releases/old*
.
Tagfilters
Notitie
ondersteuning voor tagfilters voor pijplijnresources vereist Azure DevOps Server 2020 Update 1 of hoger.
De eigenschap tags
van de trigger
filtert welke pijplijnvoltooiingsevenementen uw pijplijn kunnen activeren. Als de activeringspijplijn overeenkomt met alle tags in de lijst tags
, wordt de pijplijn uitgevoerd.
resources:
pipelines:
- pipeline: MyCIAlias
source: Farbrikam-CI
trigger:
tags: # This filter is used for triggering the pipeline run
- Production # Tags are AND'ed
- Signed
Notitie
De pijplijnresource heeft ook een eigenschap tags
. De eigenschap tags
van de pijplijnresource wordt gebruikt om te bepalen van welke uitvoering van de pijplijn artefacten moeten worden opgehaald, wanneer de pijplijn handmatig of door een geplande trigger wordt geactiveerd. Voor meer informatie, zie Resources: pijplijnen en Evaluatie van artefactversie.
Fasefilters
Notitie
Fasenfilters voor pijplijnresourcetriggers vereist Azure DevOps Server 2020 Update 1 of hoger.
U kunt uw pijplijn activeren wanneer een of meer fasen van de triggerpijplijn zijn voltooid met behulp van het stages
-filter. Als u meerdere fasen opgeeft, wordt de geactiveerde pijplijn uitgevoerd wanneer alle vermelde fasen zijn voltooid.
resources:
pipelines:
- pipeline: MyCIAlias
source: Farbrikam-CI
trigger:
stages: # This stage filter is used when evaluating conditions for
- PreProduction # triggering your pipeline. On successful completion of all the stages
- Production # provided, your pipeline will be triggered.
Overwegingen voor vertakkingen
Triggers voor het voltooien van pijplijnen gebruiken de instelling Standaardvertakking voor handmatige en geplande builds om te bepalen welke versie van de vertakkingsfilters van een YAML-pijplijn moet worden geëvalueerd bij het bepalen of een pijplijn moet worden uitgevoerd als gevolg van het voltooien van een andere pijplijn. Deze instelling verwijst standaard naar de standaardbranch van de opslagplaats.
Wanneer een pijplijn is voltooid, evalueert de Azure DevOps-runtime de vertakkingsfilters van pijplijnen met pijplijnvoltooiingstriggers die verwijzen naar de voltooide pijplijn. Een pijplijn kan meerdere versies in verschillende vertakkingen hebben, dus de runtime evalueert de vertakkingsfilters in de pijplijnversie in de vertakking die is opgegeven door de Default branch for manual and scheduled builds
-instelling. Als er een overeenkomst is, wordt de pijplijn uitgevoerd, maar de versie van de pijplijn die wordt uitgevoerd, kan zich in een andere vertakking bevinden, afhankelijk van of de geactiveerde pijplijn zich in dezelfde opslagplaats bevindt als de voltooide pijplijn.
- Als de twee pijplijnen zich in verschillende opslagplaatsen bevinden, wordt de geactiveerde versie van de pijplijn in de vertakking die door
Default branch for manual and scheduled builds
is opgegeven, uitgevoerd. - Als de twee pijplijnen zich in dezelfde opslagplaats bevinden, wordt de geactiveerde pijplijnversie in dezelfde vertakking uitgevoerd als de triggerpijplijn (met behulp van de versie van de pijplijn van die vertakking op het moment dat aan de triggervoorwaarde wordt voldaan), zelfs als die vertakking verschilt van de
Default branch for manual and scheduled builds
, en zelfs als die versie geen vertakkingsfilters heeft die overeenkomen met de vertakking van de voltooide pijplijn. Dit komt doordat de vertakkingsfilters van deDefault branch for manual and scheduled builds
vertakking worden gebruikt om te bepalen of de pijplijn moet worden uitgevoerd en niet de vertakkingsfilters in de versie die zich in de voltooide pijplijnbranch bevindt.
Als de voltooiingstriggers van de pijplijn niet worden geactiveerd, controleer dan de waarde van de instelling Standaardbranch voor handmatige en geplande builds voor de getriggerde pijplijn. De vertakkingsfilters in de versie van de pijplijn worden gebruikt om te bepalen of de trigger voor het voltooien van de pijplijn een uitvoering van de pijplijn start. Standaard is Default branch for manual and scheduled builds
ingesteld op de hoofdbranch van de opslagplaats, maar u kunt het wijzigen nadat de pijplijn is aangemaakt.
Een typisch scenario waarin de trigger voor het voltooien van de pijplijn niet wordt geactiveerd, is wanneer er een nieuwe vertakking wordt gemaakt, de vertakkingsfilters voor pijplijnvoltooiing worden gewijzigd om deze nieuwe vertakking op te nemen, maar wanneer de eerste pijplijn is voltooid op een vertakking die overeenkomt met de nieuwe vertakkingsfilters, wordt de tweede pijplijn niet geactiveerd. Dit gebeurt als de vertakkingsfilters in de pijplijnversie in de Default branch for manual and scheduled builds
vertakking niet overeenkomen met de nieuwe vertakking. U hebt de volgende twee opties om dit triggerprobleem op te lossen.
- Werk de vertakkingsfilters in de pijplijn in de
Default branch for manual and scheduled builds
vertakking bij zodat deze overeenkomen met de nieuwe vertakking. - Werk de Standaardbranch bij naar een vertakking die een versie van de pijplijn bevat met vertakkingsfilters die overeenkomen met de nieuwe vertakking voor handmatige en geplande builds.
Triggertypen combineren
Wanneer u zowel CI-triggers als pijplijntriggers in uw pijplijn opgeeft, kunt u verwachten dat nieuwe uitvoeringen worden gestart telkens wanneer een push wordt uitgevoerd die overeenkomt met de filters van de CI-trigger en een uitvoering van de bronpijplijn wordt voltooid die overeenkomt met de filters van de trigger voor het voltooien van de pijplijn.
Denk bijvoorbeeld aan twee pijplijnen met de naam A
en B
die zich in dezelfde opslagplaats bevinden, beide CI-triggers hebben en B
een pijplijnvoltooiingstrigger heeft geconfigureerd voor de voltooiing van de pijplijn A
. Als je een push naar de repository maakt:
- Er wordt een nieuwe uitvoering van
A
gestart op basis van de CI-trigger. - Tegelijkertijd wordt een nieuwe run van
B
gestart, gebaseerd op de CI-trigger. Deze run verbruikt de artefacten van de vorige run van pijplijnA
. - Wanneer
A
voltooid, wordt een andere uitvoering vanB
geactiveerd, op basis van de trigger voor het voltooien van de pijplijn inB
.
Als u wilt voorkomen dat twee uitvoeringen van B
in dit voorbeeld worden geactiveerd, moet u de CI-trigger (trigger: none
) of pijplijntrigger (pr: none
) uitschakelen.