《代碼規(guī)范》_p3c

背景

由于開始沒有統(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進行代碼檢測

  1. 開發(fā)階段 _IDE插件 (主推 IDEA)

image

備注:如果你之前裝過該插件,并且你的IDEA 導致你電腦CPU飆升400% ,甚至更高,可能是插件低版本導致的原因,可升級改插件即可

  1. 單測階段_Sonarqube

好像目前每個條線已經(jīng)實現(xiàn)。(如未實現(xiàn),繼續(xù)補充)

  1. 提交階段_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成功)

image

步驟4截圖(package成功)

image

步驟5成功 (p3c-pmd插件測試成功)

image

備注:我們只允許了一個xml解析模板,實際有這10個模板,可手動指定

image

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-receive

  • post-receive

  • update

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

image

到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

image

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中提交的信息(命令行提交一樣):

修改所有的錯誤后,才能提交成功

image
image

3.4.備注:

附件pre-receive.sh的內(nèi)容 如下操作后,可放開代碼Mege,0認為檢測成功,可以進行Push Merge。

image
  1. 其他

沒有進行全局配置 并且 某個項目的測試,即既進行全局規(guī)范檢測,某個項目的規(guī)范檢測,

采用統(tǒng)一規(guī)范,個人覺得同時配置沒有實際意義。

  1. 總結(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é)。

如果感覺還可以的話,記得點贊哈,?( ′???` )比心

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容