簡體   English   中英

創建 PR 時可以在其他 repo 中觸發管道嗎?

[英]Can I trigger pipelines in other repos when I create a PR?

我們在 Azure DevOps 中有 3 個存儲庫。 我們使用 Azure Pipelines 來運行我們的 CI/CD 鏈。 Repo A 是其他 repos 使用的工具集。 Repo B 使用 A 作為子模塊,C 使用 A 作為 git 子模塊。

在 repo A 中創建 PR 時,我們希望在 repo B 和 C 中觸發 test Pipelines,並在 repo A 的 PR 中具有狀態。 B 和 C 的管道/運行應在運行測試時使用 PR 提交。 這是為了避免 repo A 中的更改在發布時破壞 repo B 和 C。

我們的問題是,我們要確保使用 repo A(PR 中的那個)的正確提交,並將 repo B 和 C 的測試結果放入 PR。

這應該可以通過分支策略中的構建驗證策略來實現,但這不會是直截了當的。

在后台,當您在構建驗證策略中指定構建時,azure-devops 將在臨時分支/refs/pull/<id>/merge上排隊管道。 它使用代表拉取請求元數據的幾個附加變量對管道進行排隊。 當該構建完成時,它會向拉取請求發送一條狀態消息,以指示是否滿足條件。

Microsoft 有幾篇關於如何創建自定義 PR 服務器或使用Function App 創建自定義分支策略的文章。 這些可以用作一種方法,但兩篇文章都建議它們在創建拉取請求時基於 webhook 調用。 兩篇文章都提到了如何將自定義 PR 狀態消息發送回 PR。

如果您想更好地控制手動重新排隊構建驗證,理論上您還可以創建一個觸發其他 repos 中的其他管道的管道。

  1. 定義可用於觸發其他管道的構建驗證管道。 這相當於使用 Webhook/Function 應用程序,但主要區別在於 Pull Request 中的 UI 提供了重新觸發構建的選項。
  2. 此構建驗證管道讀取隊列時間變量以識別正在執行的 PR。 您可以向此管道添加邏輯,以使用 Azure DevOps REST API 將其他存儲庫/項目中的管道排隊。 在對這些管道進行排隊時,將拉取請求元數據的詳細信息作為消息正文中的隊列時間變量傳遞。
  3. 當外部管道運行時,讀取隊列時間參數以記錄哪個 PR 發起了構建。 添加一些自定義邏輯,包括檢查子模塊的/refs/pull/<id>/merge分支,然后是 Build + Test。
  4. 外部管道完成后,將 PR 狀態發布回原始 PR。
  5. 修改分支策略以將來自其他管道的構建狀態指示為必需。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM