Utlösa en pipeline efter en annan
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
Stora produkter har flera komponenter som är beroende av varandra. Dessa komponenter skapas ofta oberoende av varandra. När en överordnad komponent (till exempel ett bibliotek) ändras måste underordnade beroenden återskapas och förnyas.
I sådana här situationer lägger du till en pipeline-utlösare för att köra pipelinen när den utlösande pipelinen har slutförts.
Anteckning
Tidigare kanske du har navigerat till den klassiska redigeraren för YAML-pipelinen och konfigurerat utlösare för bygge i användargränssnittet. Även om modellen fortfarande fungerar rekommenderas den inte längre. Den rekommenderade metoden är att ange pipelineutlösare direkt i YAML-filen. Utlösare för byggkomplettering enligt definitionen i den klassiska redigeraren har olika nackdelar, som nu har åtgärdats i pipelineutlösare. Det finns till exempel inget sätt att utlösa en pipeline på samma gren som den utlösande pipelinen med hjälp av utlösare för byggkomplettering.
Konfigurera pipelineresursutlösare
Om du vill utlösa en pipeline när en annan pipeline har slutförts konfigurerar du en pipelineresursutlösare .
I följande exempel konfigureras en pipelineresursutlösare så att en pipeline med namnet app-ci
körs när alla körningar av pipelinen security-lib-ci
har slutförts.
Det här exemplet har följande två pipelines.
security-lib-ci
– Den här pipelinen körs först.# security-lib-ci YAML pipeline steps: - bash: echo "The security-lib-ci pipeline runs first"
app-ci
– Den här pipelinen har en pipelineresursutlösare som konfigurerar pipelinen så att denapp-ci
körs automatiskt varje gång en körning av pipelinensecurity-lib-ci
slutförs.# 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
anger namnet på pipelineresursen. Använd etiketten som definieras här när du refererar till pipelineresursen från andra delar av pipelinen, till exempel när du använder pipelineresursvariabler eller laddar ned artefakter.source: security-lib-ci
anger namnet på pipelinen som refereras av den här pipelineresursen. Du kan hämta en pipelines namn från Azure DevOps-portalen på flera platser, till exempel landningssidan pipelines. Som standard namnges pipelines efter lagringsplatsen som innehåller pipelinen. Information om hur du uppdaterar en pipelines namn finns i Pipelineinställningar.project: FabrikamProject
– Om den utlösande pipelinen finns i ett annat Azure DevOps-projekt måste du ange projektnamnet. Den här egenskapen är valfri om både källpipelinen och den utlösta pipelinen finns i samma projekt. Om du anger det här värdet och pipelinen inte utlöses läser du anteckningen i slutet av det här avsnittet.trigger: true
– Använd den här syntaxen för att utlösa pipelinen när någon version av källpipelinen har slutförts. Se följande avsnitt i den här artikeln för att lära dig hur du filtrerar vilka versioner av källpipelinen som slutförs utlöser en körning. När filter anges måste källpipelinekörningen matcha alla filter för att utlösa en körning.
Om den utlösande pipelinen och den utlösta pipelinen använder samma lagringsplats körs båda pipelinerna med samma incheckning när den ena utlöser den andra. Det här är användbart om din första pipeline skapar koden och den andra pipelinen testar den. Men om de två pipelinesna använder olika lagringsplatser använder den utlösta pipelinen den version av koden i grenen som anges av inställningen, enligt beskrivningen Default branch for manual and scheduled builds
i Branch considerations for pipeline completion triggers (Grenöverväganden för pipelinens slutförandeutlösare).
Anteckning
I vissa scenarier innehåller standardgrenen för manuella versioner och schemalagda versioner inte något refs/heads
prefix. Standardgrenen kan till exempel anges till main
i stället för till refs/heads/main
. I det här scenariot fungerar inte en utlösare från ett annat projekt. Om du stöter på problem när du anger project
ett annat värde än målpipelinens kan du uppdatera standardgrenen så att den inkluderas refs/heads
genom att ändra dess värde till en annan gren och sedan ändra tillbaka den till den standardgren som du vill använda.
Grenfilter
Du kan också ange vilka grenar som ska inkluderas eller exkluderas när utlösaren konfigureras. Om du anger grenfilter utlöses en ny pipeline när en källpipelinekörning har slutförts som matchar grenfiltren. I följande exempel körs pipelinen app-ci
om den security-lib-ci
har slutförts på någon releases/*
gren, förutom releases/old*
.
# app-ci YAML pipeline
resources:
pipelines:
- pipeline: securitylib
source: security-lib-ci
trigger:
branches:
include:
- releases/*
exclude:
- releases/old*
Anteckning
Om grenfiltren inte fungerar kan du prova att använda prefixet refs/heads/
. Använd till exempel refs/heads/releases/old*
i stället för releases/old*
.
Taggfilter
Anteckning
Stöd för taggfilter för pipelineresurser kräver Azure DevOps Server uppdatering 1 2020 eller senare.
Egenskapen tags
för de trigger
filter som pipelinens slutförandehändelser kan utlösa din pipeline. Om den utlösande pipelinen matchar alla taggar i tags
listan körs pipelinen.
resources:
pipelines:
- pipeline: MyCIAlias
source: Farbrikam-CI
trigger:
tags: # This filter is used for triggering the pipeline run
- Production # Tags are AND'ed
- Signed
Anteckning
Pipelineresursen har också en tags
egenskap. Egenskapen tags
för pipelineresursen används för att avgöra vilken pipeline som ska köras för att hämta artefakter från, när pipelinen utlöses manuellt eller av en schemalagd utlösare. Mer information finns i Resurser: pipelines och Utvärdering av artefaktversion.
Fasfilter
Anteckning
Fasfilter för pipelineresursutlösare kräver Azure DevOps Server 2020 Uppdatering 1 eller senare.
Du kan utlösa din pipeline när en eller flera steg i den utlösande pipelinen slutförs med hjälp stages
av filtret. Om du anger flera steg körs den utlösta pipelinen när alla de angivna stegen har slutförts.
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.
Branchöverväganden
Pipeline-slutförandeutlösare använder standardgrenen för manuella och schemalagda byggen för att avgöra vilken grens version av en YAML-pipelines grenfilter som ska utvärderas när du avgör om en pipeline ska köras som ett resultat av att en annan pipeline slutförs. Som standard pekar den här inställningen på standardgrenen för lagringsplatsen.
När en pipeline är klar utvärderar Azure DevOps-körningen pipelineresursens utlösargrensfilter för alla pipelines med pipeline-slutförandeutlösare som refererar till den slutförda pipelinen. En pipeline kan ha flera versioner i olika grenar, så körningen utvärderar grenfiltren i pipelineversionen i den gren som anges av Default branch for manual and scheduled builds
inställningen. Om det finns en matchning körs pipelinen, men den version av pipelinen som körs kan finnas i en annan gren beroende på om den utlösta pipelinen finns på samma lagringsplats som den slutförda pipelinen.
- Om de två pipelinesna finns i olika lagringsplatser körs den utlösta pipelineversionen i grenen som anges av
Default branch for manual and scheduled builds
. - Om de två pipelinesna finns på samma lagringsplats körs den utlösta pipelineversionen i samma gren som den utlösande pipelinen, även om den grenen
Default branch for manual and scheduled builds
skiljer sig från , och även om den versionen inte har grenfilter som matchar den slutförda pipelinens gren. Det beror på att grenfiltren från grenenDefault branch for manual and scheduled builds
används för att avgöra om pipelinen ska köras och inte förgreningsfiltren i den version som finns i den slutförda pipelinegrenen.
Om pipelinens slutförandeutlösare inte verkar utlösas kontrollerar du värdet för standardgrenen för manuella och schemalagda bygginställningar för den utlösta pipelinen. Grenfiltren i den grenens version av pipelinen används för att avgöra om pipelinens slutförandeutlösare initierar en körning av pipelinen. Som standard Default branch for manual and scheduled builds
anges standardgrenen för lagringsplatsen, men du kan ändra den när pipelinen har skapats.
Ett typiskt scenario där utlösaren för pipelinens slutförande inte utlöses är när en ny gren skapas, och förgreningsfiltren för pipelinens slutförande ändras för att inkludera den nya grenen, men när den första pipelinen slutförs på en gren som matchar de nya grenfiltren utlöses inte den andra pipelinen. Detta inträffar om grenfiltren i pipelineversionen i grenen Default branch for manual and scheduled builds
inte matchar den nya grenen. För att lösa det här utlösarproblemet har du följande två alternativ.
- Uppdatera grenfiltren i pipelinen i grenen
Default branch for manual and scheduled builds
så att de matchar den nya grenen. - Uppdatera standardgrenen för manuella och schemalagda byggen till en gren som har en version av pipelinen med de grenfilter som matchar den nya grenen.
Kombinera utlösartyper
När du anger både CI-utlösare och pipelineutlösare i din pipeline kan du förvänta dig att nya körningar startas varje gång en push görs som matchar filtren som CI-utlösaren och en körning av källpipelinen slutförs som matchar filtren för pipelinens slutförandeutlösare.
Överväg till exempel två pipelines med namnet A
och B
som finns på samma lagringsplats, båda har CI-utlösare och B
har en pipeline-slutförandeutlösare konfigurerad för slutförande av pipelinen A
. Om du gör en push-överföring till lagringsplatsen:
- En ny körning av
A
startas baserat på dess CI-utlösare. - Samtidigt startas en ny körning av
B
baserat på dess CI-utlösare. Den här körningen använder artefakterna från en tidigare körning av pipelinenA
. - När
A
det är klart utlöser det en annan körning avB
, baserat på pipelinens slutförandeutlösare iB
.
För att förhindra att två körningar utlöses B
i det här exemplet måste du ta bort dess CI-utlösare eller pipelineutlösare.