背景
由于開始沒有統(tǒng)一的編碼風格、代碼規(guī)范,導致現(xiàn)在代碼維護的成本越來越高。
阿里大牛們推出的《Java開發(fā)手冊》(目前最新應該是嵩山版已上傳該目錄下,下一個版本是黃山版)都是經(jīng)過實踐驗證的精華總結(jié),且在業(yè)內(nèi)使用的越來越廣。我司(chapter委員會決定)也決定基于這套規(guī)范提高代碼質(zhì)量,間接提升提升Codereview。
三個方面:
1.開發(fā)階段 :IDEA插件 ,自覺遵守,算是一種約定 (COC)
2.單測階段:Sonarqube 借助jaccoo插件 掃描UT 生成覆蓋率及漏洞報告,根據(jù)代碼漏洞進行糾正
備注:sonar階段掃描可在pom中指定掃描目錄和排除非掃描目錄。最后根據(jù)百分比計算覆蓋率,
我們可以排除一些非掃描的文件,比如filter,interceptor組件等。
3.提交階段:代碼提交階段 通過gitlab鉤子(Server hooks)及p3c-pmd進行代碼檢測
-
開發(fā)階段 _IDE插件 (主推 IDEA)
備注:如果你之前裝過該插件,并且你的IDEA 導致你電腦CPU飆升400% ,甚至更高,可能是插件低版本導致的原因,可升級改插件即可
-
單測階段_Sonarqube
好像目前每個條線已經(jīng)實現(xiàn)。(如未實現(xiàn),繼續(xù)補充)
-
提交階段_p3c-pmd & Server Hooks
3.1 P3C-PMD
P3c插件,github地址:https://github.com/alibaba/p3c
備注:有沒法發(fā)現(xiàn),idea插件,嵩山版文檔都來源于這里
使用最新的2.1.1版本,由于2.1.1版本中增加了一項檢測規(guī)則【 LockShouldWithTryFinallyRule 】,而這個規(guī)則是使用Kotlin寫的,所以在編譯打包時要格外注意。
下面為具體執(zhí)行步驟
## 1.克隆代碼到本地
git clone https://github.com/alibaba/p3c.git
## 2.進入p3c-pmd 本地目錄
cd /Users/huey/dev/java/ideaWorkSpace/rongc/p3c/p3c-pmd
## 3.先編譯Kotlin代碼,執(zhí)行:
mvn clean kotlin:compile package
## 4.上一步執(zhí)行成功后,執(zhí)行:
mvn package
## 5\. java -cp p3c-pmd-2.1.1-jar-with-dependencies.jar net.sourceforge.pmd.PMD -d /Users/huey/dev/java/ideaWorkSpace/rongc/zx-bme/staff-zx-service/staff-zx-pfmc/src/main/java/com/sunacwy/staff/zx/pfmc -R rulesets/java/ali-comment.xml
下面為步驟5規(guī)則
java -cp
p3c-pmd-2.0.1-jar-with-dependencies.jar
net.sourceforge.pmd.PMD -d {代碼路徑} -R rulesets/java/ali-comment.xml
相關(guān)截圖
步驟3截圖(kotlin相關(guān)規(guī)則 package成功)
步驟4截圖(package成功)
步驟5成功 (p3c-pmd插件測試成功)
備注:我們只允許了一個xml解析模板,實際有這10個模板,可手動指定
3.2 Gitlab鉤子配置說明
p3c-pmd插件測試成功后,接下來就是集成到gitlab 的Server Hooks
網(wǎng)上有很多說明文章可以參考,不再贅述。
Gitlab官方說明,參考: https://docs.gitlab.com/ee/administration/server_hooks.html#set-a-global-server-hook-for-all-repositories
pre-receivepost-receiveupdate
hook機制使得GitLab能在特定的重要動作發(fā)生前/時/后觸發(fā)自定義的腳本,
我們想要達到的效果是每次提交前進行代碼檢查,因此要用到pre-receive文件 。
有兩種配置方法:(看上面綠色底的gitlab官網(wǎng)說明)
一、全局配置(git上任意項目代碼提交都會檢查)
1.到gitlab服務(wù)的hooks目錄:/opt/gitlab/embedded/service/gitlab-shell/hooks
2.上傳p3c-pmd-2.1.1-jar-with-dependencies.jar到該目錄,并重命名為:p3c-pmd-2.1.1.jar
3.在hooks目錄下創(chuàng)建 pre-receive.d 目錄
4.進入pre-receive.d 目錄,創(chuàng)建:pre-receive 文件,pre-receive文件內(nèi)容為附件pre-receive.sh的內(nèi)容 (注意:不要有任何后綴,去掉.sh)
5.為pre-receive文件賦予執(zhí)行權(quán)限:chmod 776 pre-receive
6.為pre-receive.d 目錄設(shè)置git權(quán)限,執(zhí)行:chown -R git:git /opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d
7.進行測試即可
備注:和每個項目不同的只是目錄,若配置全局后,可通過shell 增加白名單機制
二、針對項目配置(只檢查該項目)
注意:gitlab 10.0版本之后默認使用hash的方式存儲代碼。
項目的存儲路徑可以在gitlab的管理頁面中查看,路徑是:
Admin Area > Overview > Projects
到gitlab服務(wù)器項目的倉庫目錄下:
/var/opt/gitlab/git-data/repositories/{your_repository_dir}.git/
在該目錄下創(chuàng)建文件夾:custom_hooks (根據(jù)gitllab 官網(wǎng) Create a server hook for a repository)
進入該目錄,上傳p3c-pmd-2.1.1-jar-with-dependencies.jar到該目錄,并重命名為:p3c-pmd-2.1.1.jar
創(chuàng)建:pre-receive 文件(注意:不要有任何后綴)
為pre-receive文件賦予執(zhí)行權(quán)限:chmod 776 pre-receive
為custom_hooks 目錄設(shè)置git權(quán)限,執(zhí)行:chown -R git:git /var/opt/gitlab/git-data/repositories/{your_repository_dir}.git/custom_hooks
pre-receive文件內(nèi)容為附件pre-receive.sh的內(nèi)容 (注意:不要有任何后綴,去掉.sh)
shell中增加白名單(當全局檢查時,可以設(shè)置放過指定倉庫)
注意:JAVA_HOME 和 CHECK_JAR_HOME的路徑設(shè)置;
CHECK_JAR_HOME 是放置P3C-XX.jar的目錄路徑。
備注: 此目錄有個hooks 軟連接,實際上就是全局配置方式
3.3 客戶端提交測試
至此,Gitlab的全局hook已配置完畢,當有代碼提交時就會檢查代碼,只有符合規(guī)范才能提交成功。下圖是在idea中提交的信息(命令行提交一樣):
修改所有的錯誤后,才能提交成功
3.4.備注:
附件pre-receive.sh的內(nèi)容 如下操作后,可放開代碼Mege,0認為檢測成功,可以進行Push Merge。
-
其他
沒有進行全局配置 并且 某個項目的測試,即既進行全局規(guī)范檢測,某個項目的規(guī)范檢測,
采用統(tǒng)一規(guī)范,個人覺得同時配置沒有實際意義。
-
總結(jié)
某個項目(Create a server hook for a repository)測試ok
全局測試(Create a global server hook for all repositories)測試ok
全局測試 白名單 跳過某倉庫.git 測試ok
全局測試 白名單 跳過某組group 測試ok
整體上Shell 相對難一些,網(wǎng)上找的,能看懂和修改即可。
如果有啥疑問可以相互溝通,歡迎指正與總結(jié)。
如果感覺還可以的話,記得點贊哈,?( ′???` )比心