Pre-push Mechanism
12 Dec 2023我在推 code 之前會先跑 lint 和 unit test,確保推 code 到 remote 上的每個 commit 都是符合團隊規範並且是正確的。不過這樣的流程若靠人為確認是很麻煩也困難的,最好的方法就是能成為一種機制,來自動化幫我們處理。
通常會有兩種作法:(1) pre-commit 或 (2) pre-push 或 (3) 混合使用。關於 pre-push 可參考這裡,本文想討論的是 pre-push 機制。
pre-push 機制是指在 push code 到 remote 前,利用 pre-push hook 跑 lint 和 unit test 等一些確認工作。這麼做的好處是確保推 code 到 remote 的 repository 前,已經跑過想做的確認工作,可改善既有的工作流程,避免推 code 之後才發現有問題。
也就是說,可以達到以下效果
- 提早發現問題,避免把有問題的 commit 推上去,造成後續 code review 的困惑,或是 CI/CD pipeline 失敗。
- 由於已在 local 通過所有確認,因此能確保 CI/CD pipeline 成功,避免不必要的失敗和錯誤,以節省資源。
- 由於能節省不必要的時間精力資源的浪費,因此能有效提高產能。
選用 pre-commit vs pre-push
由於 pre-commit 跑太多次 lint & unit test 或是跑太久,導致干擾和打斷開發者的工作、或花費太多時間在這上面,因此適度地將某些工作分配至 pre-push 會是不錯的作法。
流程
流程如下圖所示。
說明:
- Step 1:更新程式碼並做 commit。
- Step 2:執行
git push
推 code 到 remote,這時觸發git pre-push hook
來跑 lint 和 unit test。在這個階段可提早找出錯誤,防止浪費 CI/CD 的資源來做這些無謂的確認。 - Step 3:若有錯誤則修正錯誤,並重新推 code 到 remote。若全部檢查都通過,就推 code 到 remote,若沒有通過,所有變更都留在 local。