Pre-commit 執行緩慢問題分類指南

Beam pre-commit 作業是在 Jenkins 建置機器上,針對提交到 apache/beam 的每個 Pull Request (PR) 自動執行的測試套件。有關 pre-commit 和 post-commit 之間更多資訊和差異,請參閱 測試

什麼是快速的 pre-commit?

Pre-commit 測試必須通過才能合併 Pull Request (PR)。當這些測試執行緩慢時,它們會減慢 Beam 的開發過程。目標是讓 95% 的 pre-commit 作業在 30 分鐘內完成(無論是通過還是失敗)。

從技術上講,過去 4 週的執行時間的第 95 個百分位數應低於 30 分鐘,其中執行時間是作業在 Jenkins 佇列中花費的時間 + 它實際執行的時間。

判斷執行緩慢

執行緩慢主要有兩種跡象

  1. Pre-commit 作業在 30 分鐘後逾時。這可以從作業的控制台日誌中判斷。
  2. Pre-commit 沒有逾時,但 pre-commit 結果的總等待時間 > 30 分鐘。

Pre-commit 儀表板

Beam 社群指標網站包含一個 Pre-Commit 測試儀表板,顯示作業時間趨勢。您可以通過點擊它來修改時間窗口(預設為 7 天)或篩選到特定的測試套件。

example pre-commit duration dashboard

問題分類流程

  1. 搜尋現有的 Issue
  2. 如果需要,建立一個新的 Issue:GitHub Issues
  1. 確定執行緩慢的來源並找出問題。如果需要,請開啟其他 issue(例如針對多個問題)。
  2. 適當地指派 issue,例如指派給測試或 PR 的作者。

解決方案

快速修復執行緩慢的 pre-commit 測試非常重要。有關詳細資訊,請參閱pre-commit 測試政策

可能的原因和解決方案

本節列出一些修復 pre-commit 執行緩慢的起點。

資源耗盡

看看 Jupyter Notebook 中的圖表。總持續時間的上升是否與佇列時間的上升相符?如果是這樣,執行緩慢可能與此特定的 pre-commit 作業無關。

總持續時間和佇列持續時間一起上升和下降(大部分)的範例:pre-commit 時間圖表

由於 Jenkins 機器是有限的資源,其他作業可能會影響 pre-commit 佇列時間。嘗試找出其他作業最近是否變慢、頻率增加或引入了新作業。

另一種選擇是考慮添加更多 Jenkins 機器。

個別測試執行緩慢

有時,pre-commit 作業會因一個或多個測試而變慢。判斷是否是這種情況的一種方法是查看個別測試的時間。

在哪裡找到個別測試的時間

有時可以通過重構來加快測試速度。花費大量時間等待的測試(例如整合測試)可以與其他測試同時執行。

如果確定某個測試執行速度太慢而無法成為 pre-commit 測試的一部分,則應將其從 pre-commit 中刪除並放置在 post-commit 中。此外,請確保被移除的測試所涵蓋的程式碼在 pre-commit 中由單元測試涵蓋

整合測試執行緩慢

整合測試減速可能是由依賴服務引起的。

參考資料