一.背景
能進(jìn)行靜態(tài)代碼檢測的工具那么多侥锦,為啥偏偏是火線360(以下簡稱火線)呢恭垦?具體可以看這邊格嗅,其次也是因?yàn)镃I的jenkins也用到了它進(jìn)行代碼檢查,這樣本地和jenkins能保持檢查規(guī)則的一致玄柏。
實(shí)現(xiàn)目標(biāo):在git commit前先進(jìn)行靜態(tài)代碼檢查贴铜,如果有檢查出問題,此次commit則會失敗
二.實(shí)現(xiàn)思路
在項(xiàng)目下的.git/hooks 文件下有g(shù)it操作的各種鉤子(shell腳本)例子赶熟,這里用到的是git提交前的pre-commit.sample鉤子陷嘴,修改該文件調(diào)用執(zhí)行靜態(tài)代碼檢查的gradle任務(wù);這個任務(wù)首先會開啟靜態(tài)檢查邑退,其次檢查完后會分析此次檢查是否存在代碼問題,如果存在代碼問題會調(diào)用命令非正常退出地技,git鉤子則會根據(jù)是否正常退出決定此次提交能否成功秒拔;
三.詳細(xì)過程
1.本地gradle腳本(后續(xù)可以做成gradle插件方便其他項(xiàng)目使用)
①檢測規(guī)則配置文件config.xml和fireline.jar的獲取參考火線360的使用手冊砂缩,本地集成主要看手冊里面的命令行參數(shù)說明和Gradle部署
②gradle腳本的使用已經(jīng)在代碼里有詳細(xì)注釋了
③pre-commit.sample的使用看下一節(jié)
2.git pre-commit鉤子
這個鉤子文件本就存在于android項(xiàng)目下的.git/hooks目錄下,添加的代碼只有上圖紅框框住的地方妹懒,添加代碼的作用圖中已有解釋
3.應(yīng)用本地插件
四.不足
①.因?yàn)橐?guī)則不能自定義眨唬,不像lint那么靈活,沒辦法定制化
②.只能過濾規(guī)則