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 佇列中花費的時間 + 它實際執行的時間。
判斷執行緩慢
執行緩慢主要有兩種跡象
- Pre-commit 作業在 30 分鐘後逾時。這可以從作業的控制台日誌中判斷。
- Pre-commit 沒有逾時,但 pre-commit 結果的總等待時間 > 30 分鐘。
Pre-commit 儀表板
Beam 社群指標網站包含一個 Pre-Commit 測試儀表板,顯示作業時間趨勢。您可以通過點擊它來修改時間窗口(預設為 7 天)或篩選到特定的測試套件。
問題分類流程
- 搜尋現有的 Issue
- 如果需要,建立一個新的 Issue:GitHub Issues
- 元件:測試,以及其他相關的元件
- 標籤:precommit
- 在描述中參考此頁面。
- 確定執行緩慢的來源並找出問題。如果需要,請開啟其他 issue(例如針對多個問題)。
- 適當地指派 issue,例如指派給測試或 PR 的作者。
解決方案
快速修復執行緩慢的 pre-commit 測試非常重要。有關詳細資訊,請參閱pre-commit 測試政策。
可能的原因和解決方案
本節列出一些修復 pre-commit 執行緩慢的起點。
資源耗盡
看看 Jupyter Notebook 中的圖表。總持續時間的上升是否與佇列時間的上升相符?如果是這樣,執行緩慢可能與此特定的 pre-commit 作業無關。
總持續時間和佇列持續時間一起上升和下降(大部分)的範例:
由於 Jenkins 機器是有限的資源,其他作業可能會影響 pre-commit 佇列時間。嘗試找出其他作業最近是否變慢、頻率增加或引入了新作業。
另一種選擇是考慮添加更多 Jenkins 機器。
個別測試執行緩慢
有時,pre-commit 作業會因一個或多個測試而變慢。判斷是否是這種情況的一種方法是查看個別測試的時間。
在哪裡找到個別測試的時間
- 查看 pre-commit 作業 Jenkins 頁面上的
Gradle Build Scan
連結。此頁面將僅包含 Java 測試的個別測試時間(2018-08)。 - 查看 pre-commit 作業 Jenkins 頁面上的
Test Result
連結。Java 和 Python 測試都應該可以使用(2018-08)。
有時可以通過重構來加快測試速度。花費大量時間等待的測試(例如整合測試)可以與其他測試同時執行。
如果確定某個測試執行速度太慢而無法成為 pre-commit 測試的一部分,則應將其從 pre-commit 中刪除並放置在 post-commit 中。此外,請確保被移除的測試所涵蓋的程式碼在 pre-commit 中由單元測試涵蓋。
整合測試執行緩慢
整合測試減速可能是由依賴服務引起的。
參考資料
上次更新於 2024/10/31
您是否找到了您要找的所有資訊?
所有資訊是否都實用且清晰?您有任何想要變更的嗎?請告訴我們!