即拉即用:你不知道的持續集成的3個Git Hooks詳解

本文獲文章作者授權翻譯,轉載需要注明來自公眾號EAWORLD。


作者:Sarah Goff-Dupont

譯者:月滿西樓


在構建之外添加自動化的手段,是真正用好CI的關鍵。


如果你已經用了一段時間的Git了,相信你可能聽說過Git Hooks,甚至可能簡單的上手玩了玩。


Git Hooks在持續集成的語境中十分神奇,所以在本文中,我將深入介紹三個用例,并教你學會將現成可用的Hooks運用到你的工作流程中。 如果你還是Git Hooks的菜鳥,也完全不用擔心, 因為我們將從基礎開始。


1.了解Git Hooks


Hook是Git系統的本地機制,用于在諸如代碼提交(Commit)和合并(Merge)之類的操作之前或之后觸發的定制化腳本,可以把它們看作是Git的插件系統。對Git-hooks有一個入門認識的朋友都知道, 如果你進去查看Git的.git目錄,你將看到一個“hooks”的子目錄,里面包含很多Hook腳本。



安裝Git Hooks其實很簡單,網上也有很多供查閱的參考文檔,在此就不討論這個問題了。


按照Git Hooks腳本所在的位置可以分為兩類: 客戶端Hooks和服務器端Hooks。


客戶端Hooks在本地工作站運行, 而服務器端Hooks則在你的Git服務器上運行。


還可以將Hook分類為Pre- 或Post-。Pre-receive Hooks腳本在某些特定的Git操作之前被調用, 可以利用這個Hook腳本來檢查推送過來的提交是否合法,如不合法,Git操作不被執行,即客戶端的推送會被拒絕。它們實際扮演一個保鏢的角色,從后臺保護代碼庫, 防止你和項目成員提交錯誤的代碼。當從客戶端(本地庫)完成一個推送后, Post-receive Hooks將運行,它不會拒絕Git代碼提交,但可以完成開發工作流程中的一系列自動化任務。


使用Git Hooks,就像擁有一個小機器人助手, 可以實現Git相關的一系列自動化任務 (哈哈!) ?


Git Hooks可實現項目開發流程的一系列自動化任務,例如下面幾點:


  • 驗證你在提交消息中包含了關聯的JIRA密鑰

  • 在代碼合并前,確保滿足先決條件

  • 發送通知給你開發團隊的聊天室

  • 在切換到不同的工作分支后,設置你自己的工作區



2.創建穩定健康的工作分支


服務器端 Pre-receive Hooks是持續集成中的一個特別有力的補充,可以利用它來檢查代碼是否符合某些條件,防止開發人員隨意將代碼推送到master,就像精英忍者守護者一樣,保護代碼庫不受惡意代碼的影響。


開發人員通常都有足夠的責任心,當他們在自己的工作分支測試上出現問題時,他們不會將分支合并到主程序。但有時我們卻忘了檢查,特別是當我們和其他人共享一個工作分支的時候,這時候會發生更多的更改或變化,雖然我們上次已經檢查了分支的情況,但沒想到問題還是出現了。。。。。。


此時,你就可以使用一個服務器端Hook,用于查找進入master的合并, 找到時, 腳本將檢查分支上最新的構建,如果有測試失敗的情況,那么合并就會被拒絕。我的同事和Atlassian的開發者Tim Petterson為此編寫了一個Hook腳本


地址:https://bitbucket.org/tpettersen/git-ci-hooks/src/aad37a40bd0ffdef9a4188f1a7e1e5d768ca0fd1/update-green-builds-bamboo.rb


旨在與Bamboo合作,并使它在Bitbucket上可完美運用。 你可以把它抓下來,定制它,并將其添加到你的代碼庫中。


3.保護你來之不易的代碼覆蓋率


我看到很多開發團隊都在努力維護代碼覆蓋率。 很多情況下,他們不得不通過測試來追溯他們的源代碼庫。在沒有經過測試驗證支撐的情況下,當很多功能被添加進來時,好不容易達成的代碼覆蓋率每況愈下,看到這樣的情景,實在令人心灰意冷。因此,Tim還編寫了一個pre-receive服務器端Hook,來保護master代碼覆蓋率不再下降。


地址:https://bitbucket.org/tpettersen/git-ci-hooks/src/aad37a40bd0ffdef9a4188f1a7e1e5d768ca0fd1/update-coverage-bamboo.rb



這個Hook也可以查找進入到master的合并,然后調用持續集成服務器來檢查master以及分支上的代碼覆蓋率。如果分支的覆蓋有任何問題,則合并將被拒絕。


大多數持續集成服務器不會通過它們的遠程API顯示代碼覆蓋數據,但Git Hook腳本可以獲取代碼覆蓋報告。 要做到這一點,構建必須設置為將代碼覆蓋報告在master和工作分支上作為共享件發布。 一旦發布,你可以通過調用持續集成服務器從master獲取最新的覆蓋報告。對于分支覆蓋,你可以從最新的構建中獲取覆蓋報告,也可以從正在提交的merge相關分支獲取覆蓋報告。


需要說明的是, 上述實踐的前提是你已經運行了代碼覆蓋。別指望這個Hook來干這件事——它只是在你的構建結果中查找覆蓋率數據而已。 默認情況下,這個腳本也適用于Bamboo,以及Clover(Atlassian的Java和Groovy代碼覆蓋工具)。但是它可以定制成與構建服務器或代碼覆蓋工具結合在一起使用。


4.檢查分支構建的狀態


朋友通常不會讓朋友去檢驗有問題的分支。


那么此時,我們就可以利用另一個客戶端Git Hooks: post-checkout Hook腳本,同樣也是由Tim編寫的,它在你的終端窗口中顯示分支創建狀態。該腳本從本地副本獲取分支的頭版本號,然后查詢持續集成服務器,查看是否已經創建了該版本,并檢查創建是否成功。


地址:https://bitbucket.org/tpettersen/post-checkout-build-status/src



比如,你想在master中創建分支,這個Hook會告訴你, master上的head commit是否成功建立,這意味著可以用這個“安全的”提交來創建分支。 再如,如果這個版本的分支構建失敗了,但是開發團隊的墻板卻顯示了一個綠色創建(或者正好反過來)。這意味著你的本地副本已經過期了,你可以自已決定是要更新版本還是繼續使用舊版本的本地副本進行操作。


使用這個Hook對Atlassian的開發人員來說是無疑是一大神器,使他們避免了無數頭痛的困擾。如果你實在不能說服你的開發團隊采用上面討論的服務器端Hook,那至少可以在你的本地工作站上安裝一個,相信你絕對不會后悔的!


我在這里演示的所有用于持續集成的Git Hooks, 默認都是基于和Bamboo、Clover、Bitbucket 結合使用的情形,但是請記住,Git Hooks實際上是廠商無關的,因此你可以將它們定制成與你自已的編碼工具結合使用,從而在開發過程中實現真正的自動化。


原文鏈接:https://www.atlassian.com/continuous-delivery/git-hooks-continuous-integration


關于作者:

莎拉是一位Atlassian敏捷交付傳道者,之前是一名測試自動化工程師,還是簡化書呆子式生活的忠實擁躉。例如,像持續集成和自動化一樣。手動測試越來越變得枯燥無趣,她試圖作出一些改變。她所崇拜的人包括瑪格麗特·撒切爾夫人、麥吉弗和她的母親。


關于EAWorld

微服務,DevOps,元數據,企業架構原創技術分享,EAii(Enterprise?Architecture?Innovation?Institute)企業架構創新研究院旗下官方微信公眾號。


微信號:eaworld,長按二維碼關注

8月-9月,PWorld系列技術趴還將繼續上演。目前,9月24日將在上海舉行PWorld MeetUP“微服務的編排、配置與12要素專場”已啟動報名,戳“閱讀原文”可直達報名頁面,并了解更多詳情~

PWorld軟件架構&平臺創新大會:由普元發起主辦的全國頂級技術盛會,探討“數字化時代的企業軟件變化與創新”推進中國企業在數字化時代的成功轉型,積極為CTO、CIO、架構師、技術經理、開發工程師等技術相關人員設計各項議題,演講嘉賓從企業軟件、人工智能、區塊鏈、云計算、大數據、業務流程、移動開發等熱門話題中,分享他們的技術見解和最佳實踐。同時,PWorld在企業級技術會議里獨開“交互式體驗”先河、賦予參會者最大程度尊重,帶給現場以及線上的聽眾以全新的參會體驗。


閱讀原文:http://mp.weixin.qq.com/s?timestamp=1505207469&src=3&ver=1&signature=f-3TcZDMzoTvIoZBEciSHRKY6Nn2Nopb3QPOr5RsjeRfO71*zKC65oWFySSTrbB9fFY*yiYdvOKN*mI5D1R3rE3S-nuiBbTps*U0mCThqcWxqQAlD8ctTPhKjDvgqM2keQL8ZW2G04bDFGeDoehd2Ijra0aHY0kyLFIeN4zyuWE=&devicetype=Windows-QQBrowser&version=61030004&pass_ticket=qMx7ntinAtmqhVn+C23mCuwc9ZRyUp20kIusGgbFLi0=&uin=MTc1MDA1NjU1&ascene=1
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容

  • 多種多樣的工作流使得在項目中實施Git時變得難以選擇。這份教程提供了一個出發點,調查企業團隊最常見的Git工作流。...
    JSErik閱讀 4,450評論 2 8
  • 一個人來到世上,從第一聲啼哭到離去是一個漫長與短暫的旅行。他第一次流淚是為了宣告我來了,是帶著饑餓來的,趕快給我乳...
    長白王德軍閱讀 398評論 0 0
  • 文/塵落 看完瀕臨下線的最后一場《七十七天》后去吃...
    塵落_閱讀 275評論 0 0
  • 這兩天,朋友圈里有幾位微友一直在發洞簫演奏的樂曲或視頻。簫聲時而低沉凝練,高古幽深,直抵人心,時而旖旎委婉,舒緩寧...
    聆聽萬籟閱讀 387評論 7 9