在另一個管線之後觸發一個管線
Azure DevOps Services |Azure DevOps Server 2022 |Azure DevOps Server 2020
大型產品有數個彼此相依的元件。 這些元件通常會獨立建置。 當上游元件 (程式庫時,例如) 變更時,必須重建並重新驗證下游相依性。
在這些情況下,新增管線觸發程式,以在 觸發管線成功完成時執行管線。
注意
先前,您可能已流覽至 YAML 管線的傳統編輯器,並在 UI 中設定 建置完成觸發程式 。 雖然該模型仍可運作,但不再建議使用。 建議的方法是直接在 YAML 檔案內指定 管線觸發 程式。 如傳統編輯器中所定義的建置完成觸發程式有各種缺點,現在已在管線觸發程式中加以解決。 例如,沒有方法可以使用建置完成觸發程式,在與觸發管線相同的分支上觸發管線。
設定管線資源觸發程式
若要在另一個管線完成時觸發管線,請設定 管線資源 觸發程式。
下列範例會設定管線資源觸發程式,讓名為 app-ci
的管線在管線執行 security-lib-ci
完成之後執行。
此範例具有下列兩個管線。
security-lib-ci
- 此管線會先執行。# security-lib-ci YAML pipeline steps: - bash: echo "The security-lib-ci pipeline runs first"
app-ci
- 此管線具有管線資源觸發程式,可設定app-ci
管線在每次執行管線完成時security-lib-ci
自動執行。# 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
會指定管線資源的名稱。 從管線的其他部分參考管線資源時,請使用此處定義的標籤,例如使用管線資源變數或下載成品時。source: security-lib-ci
指定這個管線資源所參考的管線名稱。 您可以在數個位置從 Azure DevOps 入口網站擷取管線的名稱,例如 Pipelines 登陸頁面。 根據預設,管線會以包含管線的存放庫命名。 若要更新管線的名稱,請參閱 管線設定。project: FabrikamProject
- 如果觸發管線位於另一個 Azure DevOps 專案中,您必須指定專案名稱。 如果來源管線和觸發的管線位於相同的專案中,這個屬性是選擇性的。 如果您指定這個值,而且您的管線不會觸發,請參閱本節結尾的附注。trigger: true
- 使用此語法在來源管線的任何版本完成時觸發管線。 請參閱本文中的下列各節,以瞭解如何篩選完成的來源管線版本將觸發執行。 指定篩選準則時,來源管線執行必須符合所有篩選準則,才能觸發執行。
如果觸發管線和觸發的管線使用相同的存放庫,當其中一個觸發另一個管線時,這兩個管線都會使用相同的認可來執行。 如果您的第一個管線建置程式碼,而第二個管線會進行測試,這會很有説明。 不過,如果兩個管線使用不同的存放庫,觸發的管線將會使用 設定所 Default branch for manual and scheduled builds
指定分支中的程式碼版本,如 管線完成觸發程式的分支考慮中所述。
注意
在某些情況下,手動組建和排程組建的預設分支不包含 refs/heads
前置詞。 例如,預設分支可能會設定為 main
,而不是 設定為 refs/heads/main
。 在此案例中, 來自不同專案的觸發程式無法運作。 如果您在設定 project
為目標管線以外的值時遇到問題,您可以將預設分支的值變更為不同的分支,然後將它變更回您想要使用的預設分支,以包含 refs/heads
它。
分支篩選
您可以選擇性地指定要在設定觸發程式時包含或排除的分支。 如果您指定分支篩選,每當來源管線執行成功完成且符合分支篩選準則時,就會觸發新的管線。 在下列範例中 app-ci
,如果 security-lib-ci
在任何分支上 releases/*
完成,則管線會執行,但 除外 releases/old*
。
# app-ci YAML pipeline
resources:
pipelines:
- pipeline: securitylib
source: security-lib-ci
trigger:
branches:
include:
- releases/*
exclude:
- releases/old*
注意
如果您的分支篩選無法運作,請嘗試使用前置詞 refs/heads/
。 例如,使用 refs/heads/releases/old*
而不是 releases/old*
。
標籤篩選
注意
tags
管線完成事件可以觸發管線之篩選的 trigger
屬性。 如果觸發管線符合清單中的所有標記 tags
,管線就會執行。
resources:
pipelines:
- pipeline: MyCIAlias
source: Farbrikam-CI
trigger:
tags: # This filter is used for triggering the pipeline run
- Production # Tags are AND'ed
- Signed
階段篩選
當觸發管線的一或多個階段完成 stages
時,您可以使用篩選來觸發管線。 如果您提供多個階段,觸發的管線會在所有列出的階段完成時執行。
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.
分支考慮
管線完成觸發程式會使用 預設分支進行手動和排程的組建 設定,以判斷哪個分支版本的 YAML 管線分支篩選準則,以在判斷是否要執行管線作為另一個管線完成的結果時進行評估。 根據預設,此設定會指向存放庫的預設分支。
當管線完成時,Azure DevOps 執行時間會評估任何管線的管線資源觸發程式分支篩選,其中包含參考已完成管線的管線完成觸發程式。 管線在不同的分支中可以有多個版本,因此執行時間會評估設定所 Default branch for manual and scheduled builds
指定分支中管線版本的分支篩選。 如果有相符專案,管線會執行,但執行的管線版本可能會在不同的分支中,視觸發的管線是否位於與已完成管線相同的存放庫而定。
- 如果兩個管線位於不同的存放庫中,則會執行 所
Default branch for manual and scheduled builds
指定分支中的觸發管線版本。 - 如果這兩個管線位於相同的存放庫中,則會執行與觸發管線相同的分支中觸發的管線版本,即使該分支與 不同
Default branch for manual and scheduled builds
,即使該版本沒有符合已完成管線分支的分支篩選也一樣。 這是因為分支中的Default branch for manual and scheduled builds
分支篩選是用來判斷管線是否應該執行,而不是已完成管線分支中版本的分支篩選。
如果您的管線完成觸發程式似乎未引發,請檢查 [預設] 分支的值,以取得已觸發管線的 手動和排程組建 設定。 該分支版本的管線中的分支篩選可用來判斷管線完成觸發程式是否起始管線的執行。 根據預設, Default branch for manual and scheduled builds
會設定為存放庫的預設分支,但您可以在建立管線之後加以變更。
管線完成觸發程式不會引發的典型案例是在建立新的分支時,管線完成觸發程式分支篩選會修改為包含這個新分支,但當第一個管線在符合新分支篩選的分支上完成時,第二個管線不會觸發。 如果分支中管線版本中的 Default branch for manual and scheduled builds
分支篩選不符合新分支,就會發生這種情況。 若要解決此觸發程式問題,您有下列兩個選項。
- 更新分支中管線
Default branch for manual and scheduled builds
中的分支篩選準則,使其符合新的分支。 - 將 手動和排程組建設定的預設分支 更新為具有管線版本的分支,其中包含符合新分支之分支篩選準則的分支。
結合觸發程式類型
當您在管線中同時指定 CI 觸發程式和管線觸發程式時,您可以預期每次推送符合 CI 觸發程式的篩選時啟動新的執行,而且來源管線的執行會符合管線完成觸發程式的篩選。
例如,假設有兩個名為 A
且位於相同存放庫中的管線,兩者都有 CI 觸發程式,而且 B
管線完成觸發程式已設定為完成管線 A
B
。 如果您將推送推送至存放庫:
- 的新回合
A
會根據其 CI 觸發程式啟動。 - 同時,會根據其 CI 觸發程式啟動 新的 執行
B
。 此執行會取用先前執行管線A
的成品。 - 完成時
A
,它會根據 中的B
管線完成觸發程式,觸發的另一個執行B
。
若要防止在此範例中觸發 兩次執行 B
,您必須移除其 CI 觸發程式或管線觸發程式。