Gitlab集成阿里巴巴P3C-PMD代码质量检测插件
1. 获取P3C-PMD
(1) 下载源码
源码地址:https://github.com/alibaba/p3c
p3c-pmd-2.1.1-jar.zip:
https://pan.baidu.com/s/1VSXmP84v0OXvcsQ4Jdxxug?pwd=r4cl 提取码: r4cl
(2) 打包
源码下载后,解压,进入p3c-pmd子项目,执行Maven命令:mvn clean package进行打包(或者导入开发工具通过工具打包)。
(3) 把打好的包(p3c-pmd-2.1.1-jar-with-dependencies.jar)拷贝到gitlab hooks脚本可以引用到的路径下,比如我这里拷贝到gitlab的安装目录下:/var/opt/gitlab/git-hooks(我的gitlab是通过docker方式安装的,该目录映射到了宿主机)。
2. 创建hooks
2.1 选择目标项目
在gitlab中,项目目录是经过hash的,所以我们首先要找到目标项目的hash目录。
(1)进入项目列表。
(2)点击列表中的项目名称,进入项目详情页面,找到“Gitaly相对路径”即是。
(3)进入目录
我的gitlab是通过docker方式安装的,已映射到宿主机。
2.2 创建hooks
在项目目录下创建custom_hooks/pre-receive.d目录,并在pre-receive.d目录下创建pre-receive文件(注意:不需要扩展名)。
pre-receive文件内容如下(无需重启gitlab即可生效):
#!/bin/bash# oldrev,旧版本号;newrev,新版本号;committer,当前提交代码的用户;REJECT=0,正常export JAVA_HOME=/var/opt/gitlab/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH# 命令结果状态
REJECT=0
# 代码检测库
PMD_LIB=/var/opt/gitlab/git-hooks/p3c-pmd-2.1.1-jar-with-dependencies.jar
# 检测结果国际化语言:en、zh
PMD_LANGUAGE=zh
# 文件字符编码
FILE_ENCODING=utf-8echo "开始进行代码质量检测..."while read oldrev newrev refname; doif [ "$oldrev" = "0000000000000000000000000000000000000000" ];thenoldrev="${newrev}^"ficommitter=`git log -1 $newrev --pretty=%ce`files=`git diff --name-only ${oldrev} ${newrev} | grep -e ".java$"`echo $committerif [ -n "$files" ]; thenTEMPDIR="tmp"for file in ${files}; domkdir -p "${TEMPDIR}/`dirname ${file}`" > /dev/nullgit show $newrev:$file > ${TEMPDIR}/${file}done;java -Dfile.encoding=$FILE_ENCODING -Dpmd.language=$PMD_LANGUAGE -cp $PMD_LIB net.sourceforge.pmd.PMD -d $TEMPDIR -R rulesets/java/ali-comment.xml,rulesets/java/ali-concurrent.xml,rulesets/java/ali-constant.xml,rulesets/java/ali-exception.xml,rulesets/java/ali-flowcontrol.xml,rulesets/java/ali-naming.xml,rulesets/java/ali-oop.xml,rulesets/java/ali-orm.xml,rulesets/java/ali-other.xml,rulesets/java/ali-set.xml -f text -shortnamesREJECT=$?echo "reject = "$REJECTif [ $REJECT = 0 ] ;thenecho "码出高效!您的代码通过阿里巴巴Java开发规范(黄山版)检测!"elif [ $committer = 'super@domain.com' ]; thenecho "特殊情况,特殊处理!"REJECT=0else echo "在您的代码中发现了瑕疵,请及时修复,然后再提交!(代码规范请参考:https://github.com/alibaba/p3c)"firm -rf $TEMPDIRfi
doneexit $REJECT
授权:
- chown -R git:root custom_hooks/pre-receive.d
- chmod 774 custom_hooks/pre-receive.d/pre-receive
这样,开发者每次push代码到该项目的仓库上时,gitlab都会执行该hooks脚本,如果不通过,会被gitlab拒绝push。
说明:
我这里通过docker安装的gitlab容器内没有JDK,映射了宿主机的JDK;
把chown命令中的git:root(用户/用户组)换成自己的;
chmod命令把pre-receive文件授予用户/用户组读、写、执行权限。
3. 使用
在目标项目上,编写不符合规范的代码
然后push,结果如下图:
Gitlab集成阿里巴巴P3C-PMD代码质量检测插件相关推荐
- java lint_Java代码规范与质量检测插件SonarLint
1. SonarLint SonarLint是一个代码质量检测插件,可以帮助我们检测出代码中的坏味道 下载与安装 在需要检测的单个文件或者单个项目上右键 --> Analyze --> ...
- Java代码规范与质量检测插件SonarLint
1. SonarLint SonarLint是一个代码质量检测插件,可以帮助我们检测出代码中的坏味道 下载与安装 在需要检测的单个文件或者单个项目上右键 --> Analyze --> ...
- 代码质量检测(jacoco pmd pipeline)
代码质量检测 一.静态代码分析 静态代码分析是指在不运行程序的前提下,对源代码进行分析或检查,范围包括代码风格.可能出现的空指针.代码块大小.重复的代码等. pipeline中,静态代码分析通常被安排 ...
- 代码质量检测-SonarQube
文章目录 前言 一.SonarQube是什么? 二.SonarQube安装步骤 1.docker安装 2.docker-compose安装 3. 访问SonarQube 4. 配置SonarQube ...
- java检测工具_常用Java代码质量检测评估工具
常用Java代码质量检测评估工具 1. PMD from http://pmd.sourceforge.net/ PMD能够扫描Java 源代码,查找类似以下的潜在问题: 可能的bug--try/ca ...
- 【IDEA】代码质量检测工具 QAPLug
[IDEA]代码质量检测工具 QAPLug 代码质量检测工具 情景: 写完代码一定要别人review才发现bug或不好的语法或多余的变量是一件多么尴尬的事情,如果想在写代码时或者写代码后自己能发现问题 ...
- 代码质量检测平台架构设计
「前言」 你是否清楚的了解自己的项目有多少个文件夹.多少个文件.多少行代码.多少个函数.多少个字符数? 你是否在项目中引入过代码质量检测相关的工具? 你是否在不同项目的切换中饱受indent=2还是i ...
- 皕杰报表之小程序代码质量检测
最近在被云开发免费的份额,由于一些原因把小程序开发工具升级到了最新版本,新版本上传需要代码质量检测. 一.主包 其中按照官方说明需要提前知道的可优化项: 1. 代码包不包含插件大小超过 1.5 M [ ...
- python代码检测工具及区别_flake8-python代码质量检测工具
flake8是python代码质量检测工具. 描述 flake8是一个命令行实用程序,用于在整个Python项目中加强样式的一致性. 默认情况下,它包括PyFlakes项目提供的lint检查,PyCo ...
最新文章
- react控制组件的显示或隐藏, 根据state判断元素显示隐藏 , setState不实时生效解决方法
- 硬核干货:一位码农的架构师封神之路!
- TensorFlow object detection api------ssd_mobilenet使用
- 最强去马赛克AI来了,分分钟回到无马世界,连像素风《我的世界》人物都能复原...
- Android 中的编码与解码
- Android 网络编程之Http通信
- 第十六期:AWS 瘫痪:DNS 被 DDoS 攻击了 15 个小时
- 【HDU - 2093】 考试排名(排序+格式输出)
- Xcode工程添加第三方文件的详细分析 Create folder references for any added folders(转)
- 分别用Comparable和Comparator两个接口对下列四位同学的成绩做降序排序,如果成绩一样, 那在成绩排序的基础上按照年龄由小到大排序。 姓名(String
- 大数据“高烧不断”,“得数据者得天下”的关键在哪?
- C语言解释器的实现--让脚本跑起来(六)
- 8个优秀的CSS实践,再不刷题就晚了!
- LearnOpenGL 模型加载—Assimp
- html当前月份的英文,一月到十二月各个月份的英文缩写
- 每天15min-HTML5(10)-表单(上)
- 2022-4-28作业
- opus 编码和解码完整demo代码,opus和wav互转(js源码)
- 为什么越能干越忙碌越吃亏?这四点干货,说破职场微生态
- 三分钟下载好mysql-8.0.16