Een pijplijn na een andere activeren

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

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 nadat de triggerpijplijn is voltooid.

Notitie

Eerder hebt u mogelijk genavigeerd naar de klassieke editor voor uw YAML-pijplijn en geconfigureerde triggers voor voltooiing van de build in de gebruikersinterface. Hoewel dat model nog steeds werkt, wordt het niet meer aanbevolen. De aanbevolen methode is om pijplijntriggers rechtstreeks in het YAML-bestand op te geven. 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 in dezelfde vertakking als die van de triggerende pijplijn met behulp van triggers voor het voltooien van de build.

Pijplijnresourcetriggers configureren

Als u een pijplijn wilt activeren na voltooiing van een andere pijplijn, configureert u een trigger voor pijplijnresources.

In het volgende voorbeeld wordt een pijplijnresourcetrigger geconfigureerd, zodat een pijplijn met de naam app-ci wordt uitgevoerd nadat een uitvoering van de security-lib-ci pijplijn 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 de app-ci pijplijn automatisch wordt uitgevoerd telkens wanneer een uitvoering van de security-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 hiermee geeft u 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 hiermee geeft u 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 voor pijplijnen. Pijplijnen worden standaard benoemd naar de opslagplaats die de pijplijn bevat. Zie Pijplijninstellingen om de naam van een pijplijn bij te werken. Als de pijplijn zich in een map bevindt, neemt u de mapnaam op, inclusief de voorloopmap \, 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 voor meer informatie over het filteren van de versies van de bronpijplijn die worden voltooid. Wanneer filters zijn opgegeven, moet de uitvoering van de bronpijplijn overeenkomen met alle filters om een uitvoering te activeren.

Als de triggerpijplijn en de geactiveerde pijplijn dezelfde opslagplaats gebruiken, worden beide pijplijnen uitgevoerd met dezelfde doorvoering wanneer de andere wordt geactiveerd. Dit is handig als uw eerste pijplijn de code bouwt en de tweede pijplijn deze test. Als de twee pijplijnen echter verschillende opslagplaatsen gebruiken, gebruikt de geactiveerde pijplijn de versie van de code in de vertakking die is opgegeven door de Default branch for manual and scheduled builds instelling, zoals wordt beschreven in overwegingen bij vertakkingen voor triggers voor pijplijnvoltooiing.

Notitie

In sommige scenario's bevat refs/heads de standaardvertakking voor handmatige builds en geplande builds geen voorvoegsel. De standaardbranch kan bijvoorbeeld worden ingesteld op main in plaats van op refs/heads/main. In dit scenario werkt een trigger van een ander project niet. Als u problemen ondervindt wanneer u deze instelt project op een andere waarde dan de doelpijplijn, kunt u de standaardbranch bijwerken zodat deze wordt opgenomen refs/heads door de waarde ervan te wijzigen in een andere vertakking en door deze vervolgens weer te wijzigen in 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 uitvoering van een releases/*security-lib-ci vertakking, met uitzondering vanreleases/old*.

# app-ci YAML pipeline
resources:
  pipelines:
  - pipeline: securitylib
    source: security-lib-ci
    trigger: 
      branches:
        include: 
        - releases/*
        exclude:
        - releases/old*

Als u de onderliggende pijplijn wilt activeren voor verschillende vertakkingen waarvoor het bovenliggende item wordt geactiveerd, moet u alle vertakkingsfilters opnemen waarvoor het bovenliggende item wordt geactiveerd. In het volgende voorbeeld wordt de app-ci pijplijn uitgevoerd als de security-lib-ci uitvoering 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, gebruikt u het voorvoegsel refs/heads/. Gebruik bijvoorbeeld refs/heads/releases/old*in plaats van releases/old*.

Tagfilters

De tags eigenschap van de trigger filters die pijplijnvoltooiingsevenementen kunnen activeren voor uw pijplijn. Als de triggerpijplijn overeenkomt met alle tags in de tags lijst, 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 tags eigenschap. De tags eigenschap van de pijplijnresource wordt gebruikt om te bepalen van welke pijplijn wordt uitgevoerd om artefacten op te halen, wanneer de pijplijn handmatig of door een geplande trigger wordt geactiveerd. Zie Resources: pijplijnen en evaluatie van de artefactversie voor meer informatie.

Fasefilters

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 pijplijnvoltooiing gebruiken de standaardvertakking voor handmatige en geplande builds om te bepalen welke branchversie van de vertakkingsfilters van een YAML-pijplijn moeten worden geƫvalueerd om te bepalen of een pijplijn moet worden uitgevoerd als gevolg van een andere pijplijn die is voltooid. 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 pijplijnversie in de vertakking uitgevoerd die is Default branch for manual and scheduled builds opgegeven.
  • 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 anders is dan 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 de Default 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 triggers voor het voltooien van de pijplijn niet lijken te worden geactiveerd, controleert u de waarde van de standaardbranch voor handmatige en geplande builds voor de geactiveerde 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. Default branch for manual and scheduled builds Standaard is deze ingesteld op de standaardbranch van de opslagplaats, maar u kunt deze wijzigen nadat de pijplijn is gemaakt.

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 voor handmatige en geplande builds bij naar een vertakking met een versie van de pijplijn met de vertakkingsfilters die overeenkomen met de nieuwe vertakking.

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 het voltooien van de pijplijn A. Als u een push naar de opslagplaats maakt:

  • Er wordt een nieuwe uitvoering gestart op basis van A de CI-trigger.
  • Tegelijkertijd wordt een nieuwe uitvoering gestart op basis van B de CI-trigger. Deze uitvoering verbruikt de artefacten van een vorige uitvoering van de pijplijn A.
  • Wanneer A dit is voltooid, wordt een andere uitvoering geactiveerd, op basis van de trigger voor het voltooien van Bde pijplijn in B.

Als u wilt voorkomen dat twee uitvoeringen B in dit voorbeeld worden geactiveerd, moet u de CI-trigger (trigger: none) of pijplijntrigger (pr: none) uitschakelen.