1.查找项目地址
点击menu->admin->project选子需要加钩子的项目
path为linux上路径地址,默认gitlab安装路径为
/var/opt/gitlab/git-data/repositories/
2.下载p3c代码
https://github.com/alibaba/p3c
3.自定义排除规则(因为阿里有些规范并不适用于实际开发)
在rulesets下新建自己的规则排除文件
ali-p3c.xml:
AlibabaJavaSets
4.打包上传至服务器,进行钩子配置
5.在gitlab项目目录下创建如下目录和文件
路径如:
cd /var/opt/gitlab/git-data/repositories/@hashed/9c/fd/9cfd3c755be26b4e1645918e2a64a26e3d851ede421e0b257f783b443bc443d1.git
创建目录
mkdir -p custom_hooks/pre-receive.d/
在pre-receive.d/目录下,创建钩子文件
vim pre-receive
#!/bin/bash
# oldrev,旧版本号;newrev,新版本号;committer,当前提交代码的用户;REJECT=0,正常
export JAVA_HOME=/usr/local/jdk1.8.0_191
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=/usr/local/p3c-pmd-2.1.1-jar-with-dependencies.jar
# 检测结果国际化语言:en、zh
PMD_LANGUAGE=zh
# 文件字符编码
FILE_ENCODING=utf-8
echo "开始进行代码质量检测..."
while read oldrev newrev refname; do
if [ "$oldrev" = "0000000000000000000000000000000000000000" ];then
oldrev="${newrev}^"
fi
committer=`git log -1 $newrev --pretty=%ce`
files=`git diff --name-only ${oldrev} ${newrev} | grep -e ".java$"`
echo $committer
if [ -n "$files" ]; then
TEMPDIR="tmp"
for file in ${files}; do
mkdir -p "${TEMPDIR}/`dirname ${file}`" > /dev/null
git 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/ali-p3c.xml -f text -shortnames
REJECT=$?
echo "reject = "$REJECT
if [ $REJECT = 0 ] ;then
echo "码出高效!您的代码通过阿里巴巴Java开发规范(黄山版)检测!"
elif [ $committer = 'super@domain.com' ]; then
echo "特殊情况,特殊处理!"
REJECT=0
else echo "在您的代码中发现了瑕疵,请及时修复,然后再提交!(代码规范请参考:https://github.com/alibaba/p3c)"
fi
rm -rf $TEMPDIR
fi
done
exit $REJECT
注:别忘了给此文件加权限
chmod +777 pre-receive
6.提交代码进行测试即可



