2015-10-16 138 views
0

我是git的新手,我正在研究將它集成到我們的CI(Jenkins)環境時有什麼可能性。Git post-commit hook x central CI系統

基於我在這裏找到的幾個答案(主要是How to configure Git post commit hook),我明白配置git提交後掛鉤來觸發CI構建的常見願望(或實踐),而不是簡單地依賴SCM輪詢。

當用戶運行git commit時會觸發post-commit掛鉤。由於提交(使用git術語)意味着委託您的本地存儲庫,所以這些更改在中央存儲庫中尚不可用(即,它們尚未被推送到)。

假設你有一箇中央CI服務器,我的問題是:什麼是後使用「觸發您的CI構建」的承諾,如果CI系統不能看到這些變化了嗎?

回答

1

假設您有一箇中央CI服務器,我的問題是:如果CI系統無法看到這些更改,那麼在提交後「觸發您的CI構建」有什麼用?

有很多工作流程供您選擇。試圖包括這裏一個完整的畫面:

# as a new member of your team 
git clone https://your-repo your-repo 
cd your-repo 
git remote add ci-server https://ci-server 
git checkout -b my-feature-branch ci-server/master 
# code stuff 
git add . 
git commit -m "lala" 
# code stuff 
git add . 
git commit -m "lala" 
# ... 
git push my-feature-branch ci-server 
# rinse and repeat 
git fetch ci-server/master 
git checkout my-next-feature ci-server/master 

現在,CI服務器反作用於被推送的提交,建造它,執行測試等,最後合併提交給它的主人,你作爲一個開發人員拉/稍後獲取(或用作上述新功能分支的基礎)。

這就是我所說的最小的工作示例。也看到類似gitflowAtlassians comparison of git branching models

+0

嗨@chelmertz。第一次調用'git commit -m「lala」'會觸發你的post-commit鉤子(即你的客戶端鉤子 - http://www.git-scm.com/book/en/v2/Customizing-Git -Git-Hooks#客戶端鉤子 - 在'.git/hooks/post-commit' shell腳本中定義)。然而,存儲庫並不知道你的變化(你還沒有推動它們!),所以觸發構建似乎毫無意義。一個「後推」鉤子似乎會做你所描述的,但並不存在(http://stackoverflow.com/a/1799624)。 –

+0

Hello @ E.Z。根據我的經驗(這可能是錯誤的),我一直在本地工作,並且在每個功能的獨立分支中工作。如果可以的話,測試應該在本地運行。一旦我覺得足夠準備好分享我的代碼,我將它推送到CI服務器。 CI服務器可以使用'post-receive'。請參閱[「git-scm.com」上的「服務器端掛鉤」](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks#Server-Side-Hooks) – chelmertz

+0

要展開一個進一步:我玩弄代碼,並可能測試了很多不同的方法來解決問題。有時我使用TDD,有時候我會做一些小的修復,需要手動驗證。因此,在本地提交之間運行完整的測試套件對我來說聽起來不太可行。 CI的「集成」部分旨在將您的工作與其他工作結合起來,而不是「一直測試所有事情」IMO。 – chelmertz