Egy folyamat aktiválása a másik után

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

A nagy termékek több olyan összetevőből állnak, amelyek egymástól függenek. Ezek az összetevők gyakran egymástól függetlenül vannak felépítve. Ha egy felsőbb rétegbeli összetevő (például egy tár) megváltozik, az alsóbb rétegbeli függőségeket újra kell felépíteni és újra kell értékelni.

Ilyen helyzetekben adjon hozzá egy folyamatindítót a folyamat futtatásához az eseményindító folyamat sikeres befejezése után.

Megjegyzés:

Korábban előfordulhat, hogy a YAML-folyamat klasszikus szerkesztőjéhez és a felhasználói felületen konfigurált buildkiegészítési eseményindítókhoz navigált. Bár ez a modell továbbra is működik, már nem ajánlott. Az ajánlott módszer a folyamatindítók közvetlenül a YAML-fájlban való megadása. A klasszikus szerkesztőben definiált buildkiegészítési eseményindítóknak különböző hátrányai vannak, amelyeket a folyamatindítók már kezeltek. Például nem indítható el egy folyamat ugyanazon az ágon, mint az eseményindító folyamaton a buildkiegészítési eseményindítók használatával.

Folyamaterőforrás-eseményindítók konfigurálása

Ha egy folyamatot egy másik folyamat befejezésekor szeretne aktiválni, konfiguráljon egy folyamaterőforrás-eseményindítót.

Az alábbi példa egy folyamaterőforrás-eseményindítót konfigurál, hogy a folyamat futtatása security-lib-ci után egy elnevezett app-ci folyamat fusson.

Ebben a példában a következő két folyamat található.

  • security-lib-ci – Ez a folyamat fut először.

    # security-lib-ci YAML pipeline
    steps:
    - bash: echo "The security-lib-ci pipeline runs first"
    
  • app-ci – Ez a folyamat rendelkezik egy folyamaterőforrás-eseményindítóval, amely úgy konfigurálja a app-ci folyamatot, hogy a folyamat minden futtatásakor security-lib-ci automatikusan fusson.

    # 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 a folyamaterőforrás nevét adja meg. Használja az itt definiált címkét, amikor a folyamat más részeiből származó folyamaterőforrásra hivatkozik, például folyamaterőforrás-változók használatakor vagy összetevők letöltésekor.
  • source: security-lib-ci a folyamaterőforrás által hivatkozott folyamat nevét adja meg. A folyamat nevét több helyen is lekérheti az Azure DevOps portálról, például a Pipelines kezdőlapjáról. Alapértelmezés szerint a folyamatok neve a folyamatot tartalmazó adattárról lesz elnevezve. A folyamat nevének frissítéséhez tekintse meg a folyamatbeállításokat. Ha a folyamat egy mappában található, adja meg a mappa nevét, beleértve például \security pipelines\security-lib-cia kezdőt \is.
  • project: FabrikamProject - Ha az eseményindító folyamat egy másik Azure DevOps-projektben található, meg kell adnia a projekt nevét. Ez a tulajdonság nem kötelező, ha a forrásfolyamat és az aktivált folyamat is ugyanabban a projektben található. Ha megadja ezt az értéket, és a folyamat nem aktiválódik, tekintse meg a szakasz végén található megjegyzést.
  • trigger: true – Ez a szintaxis a forrásfolyamat bármely verziójának befejeződésekor aktiválja a folyamatot. A cikk következő szakaszaiból megtudhatja, hogyan szűrheti, hogy a forrásfolyamat-befejezés mely verziói indítják el a futtatást. Ha szűrők vannak megadva, a forrásfolyamat futtatásának meg kell egyeznie az összes szűrővel a futtatás elindításához.

Ha az eseményindító folyamat és az aktivált folyamat ugyanazt az adattárat használja, mindkét folyamat ugyanazzal a véglegesítéssel fog futni, amikor az egyik aktiválja a másikat. Ez akkor hasznos, ha az első folyamat létrehozza a kódot, és a második folyamat teszteli. Ha azonban a két folyamat különböző adattárakat használ, az aktivált folyamat a beállítás által Default branch for manual and scheduled builds megadott ágban a kód verzióját fogja használni, a folyamatkizárási eseményindítók elágaztatási szempontjaiban leírtak szerint.

Megjegyzés:

Bizonyos esetekben a manuális és ütemezett buildek alapértelmezett ága nem tartalmaz előtagot refs/heads . Előfordulhat például, hogy az alapértelmezett ág ahelyett, hogy main a következőre refs/heads/mainlenne beállítva. Ebben a forgatókönyvben egy másik projekt eseményindítója nem működik. Ha a célfolyamattól eltérő értékre állít be project problémákat, módosíthatja az alapértelmezett ágat úgy, hogy refs/heads az értéket egy másik ágra módosítja, majd visszaváltja a használni kívánt alapértelmezett ágra.

A YAML-sablonok nem támogatják a folyamatkiegészítési eseményindítók konfigurálását. Továbbra is definiálhat folyamaterőforrásokat a sablonokban.

Ágszűrők

Megadhatja azokat az ágakat, amelyek az eseményindító konfigurálásakor belefoglalhatók vagy kizárhatók. Ha ágszűrőket ad meg, egy új folyamat aktiválódik, amikor egy forrásfolyamat futtatása sikeresen befejeződött, amely megfelel az ágszűrőknek. Az alábbi példában a app-ci folyamat akkor fut, ha a security-lib-ci folyamat bármely releases/* ágon befejeződik, kivéve a releases/old*.

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

Ha a gyermekfolyamatot különböző ágakhoz szeretné aktiválni, amelyeknél a szülő aktiválódik, adja meg az összes olyan ágszűrőt, amelyhez a szülő aktiválódik. Az alábbi példában a app-ci folyamat akkor fut, ha a security-lib-ci folyamat bármely releases/* ágon vagy főágon befejeződik, kivéve a következőt releases/old*: .

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

Megjegyzés:

Ha az ágszűrők nem működnek, próbálja meg használni az előtagot refs/heads/. Például használja ahelyett, hogy refs/heads/releases/old*releases/old*.

Címkeszűrők

Megjegyzés:

A folyamaterőforrások címkeszűrő-támogatásához az Azure DevOps Server 2020 1. vagy újabb frissítése szükséges.

Azon tags szűrők tulajdonsága trigger , amelyek a folyamat befejezésének eseményei aktiválhatják a folyamatot. Ha az eseményindító folyamat megfelel a tags lista összes címkéjének, a folyamat fut.

resources:
  pipelines:
  - pipeline: MyCIAlias
    source: Farbrikam-CI
    trigger:
      tags:        # This filter is used for triggering the pipeline run
      - Production # Tags are AND'ed
      - Signed

Megjegyzés:

A folyamaterőforrásnak is van tulajdonsága tags . A tags folyamaterőforrás tulajdonsága határozza meg, hogy melyik folyamat fut az összetevők lekéréséhez, amikor a folyamat manuálisan vagy ütemezett eseményindítóval aktiválódik. További információ: Erőforrások: folyamatok és az összetevő verziójának kiértékelése.

Szakaszszűrők

A folyamatot akkor aktiválhatja, ha az eseményindító folyamat egy vagy több szakasza befejeződött a stages szűrő használatával. Ha több fázist ad meg, az aktivált folyamat akkor fut, amikor az összes felsorolt fázis befejeződik.

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. 

Elágazási szempontok

A folyamatkiegészítési eseményindítók az Alapértelmezett ágat használják a manuális és ütemezett buildek beállításához annak meghatározásához, hogy a YAML-folyamat ágszűrői melyik ágának verzióját kell kiértékelni annak meghatározásakor, hogy egy folyamatot egy másik folyamat befejezése eredményeként kell-e futtatni. Ez a beállítás alapértelmezés szerint az adattár alapértelmezett ágára mutat.

Amikor egy folyamat befejeződik, az Azure DevOps-futtatókörnyezet kiértékeli a folyamaterőforrás-eseményindító ágszűrőit minden olyan folyamat esetében, amely folyamatkiegészítési eseményindítókkal rendelkezik, amelyek a befejezett folyamatra hivatkoznak. A folyamatok több verzióval is rendelkezhetnek a különböző ágakban, így a futtatókörnyezet kiértékeli a folyamat verziójának ágszűrőit a Default branch for manual and scheduled builds beállítás által megadott ágban. Ha van egyezés, a folyamat fut, de a futtatott folyamat verziója eltérő ágban lehet attól függően, hogy az aktivált folyamat ugyanabban az adattárban van-e, mint a befejezett folyamat.

  • Ha a két folyamat különböző adattárakban található, a rendszer futtatja az általuk megadott Default branch for manual and scheduled builds ág aktivált folyamatverziót.
  • Ha a két folyamat ugyanabban az adattárban található, az aktiváló folyamat által aktivált folyamat verziója az eseményindító folyamattal azonos ágban fut (a folyamat azon verziójának használatával, amely az eseményindító feltétel teljesülésekor az adott ágból származik), még akkor is, ha ez az ág eltér a Default branch for manual and scheduled buildstöbbitől, és még akkor is, ha az adott verzió nem rendelkezik a befejezett folyamat ágának megfelelő ágszűrőkkel. Ennek az az oka, hogy az ág ágszűrői Default branch for manual and scheduled builds határozzák meg, hogy a folyamat fut-e, és nem a befejezett folyamatágban lévő verzióban lévő ágszűrők.

Ha úgy tűnik, hogy a folyamat befejezési eseményindítói nem aktiválódnak, ellenőrizze az Alapértelmezett ág értékét az aktivált folyamat manuális és ütemezett buildelési beállításához. Az ágszűrők az adott ág folyamatverziójában annak meghatározására szolgálnak, hogy a folyamat befejezési eseményindítója elindítja-e a folyamat futtatását. Alapértelmezés szerint Default branch for manual and scheduled builds az adattár alapértelmezett ágára van beállítva, de a folyamat létrehozása után módosíthatja.

A folyamatkiegészítési eseményindító általában nem aktiválódik egy új ág létrehozásakor, a folyamatkizárási eseményindító ágszűrői úgy módosulnak, hogy belefoglalják ezt az új ágat, de ha az első folyamat az új ágszűrőknek megfelelő ágon fejeződik be, a második folyamat nem aktiválódik. Ez akkor fordul elő, ha az ág folyamatverziójának Default branch for manual and scheduled builds ágszűrői nem egyeznek az új ágával. Az eseményindítóval kapcsolatos probléma megoldásához az alábbi két lehetőség közül választhat.

  • Frissítse az ág folyamatában Default branch for manual and scheduled builds lévő ágszűrőket úgy, hogy azok megfeleljenek az új ágnak.
  • Módosítsa a manuális és ütemezett buildek alapértelmezett ágát egy olyan ágra, amely rendelkezik a folyamat egy verziójával az új ágnak megfelelő ágszűrőkkel.

Eseményindító-típusok kombinálása

Amikor ci-eseményindítókat és folyamat-eseményindítókat is megad a folyamatban, számíthat arra, hogy az új futtatások minden alkalommal elindulnak, amikor leküldés történik, amely megfelel a CI-eseményindító szűrőinek, és a forrásfolyamat futtatása befejeződik, amely megfelel a folyamatkiegészítési eseményindító szűrőinek.

Vegyük például két elnevezett A és B ugyanabban az adattárban található folyamatot, mindkettő ci-eseményindítóval rendelkezik, és B a folyamat Abefejezéséhez konfigurálva van egy folyamatkizárási eseményindító. Ha leküldést hajt ki az adattárba:

  • A ci-eseményindító alapján egy új futtatás A indul el.
  • Ugyanakkor a CI-eseményindító alapján egy új futtatás B is elindul. Ez a futtatás egy korábbi folyamatfuttatás Aösszetevőit használja fel.
  • Ha A befejeződött, a folyamat befejezési eseményindítója Balapján egy újabb futtatás aktiválódik a következőben B: .

A példában szereplő két futtatás aktiválásának B megakadályozásához le kell tiltania a CI-eseményindítót (trigger: none) vagy a folyamat eseményindítóját (pr: none).