GIT推送代码时规范性检测配置

#提前准备文件:checkstyle-8.45.1-all.jar、google_checks.xml

1.修改/etc/gitlab/gitlab.rb配置文件
找到gitlab_shell['custom_hooks_dir']并放开注释
gitlab_shell['custom_hooks_dir']="/opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks_dir"
2.在自定义钩子目录下新增文件夹:pre-receive.d, post-receive.d, update.d
3.在pre-receive.d文件夹中新增pre-receive文件并进行编码

#!/bin/bash
#配置jdk
#配置node
#配置python
#需安装pylint pip install pylint
#同级目录下需增加checkstyle-8.45.1-all.jar
#同级目录下需增加google_checks.xml(配置java检测规则)
#同级目录下需增加google_checks.xml(配置java检测规则)
#同级目录下需增加.eslintrc.js(配置vue检测规则)
#npm install eslint --save
#需增加软连接 ln -s /usr/bin/node /node_home/bin/node
#

BASE_PATH=$(cd `dirname $0`;pwd)
JAVA_HOME=/home/zfb/software/jdk1.8.0_162
PY_LINT_HOME=/usr/local/bin/pylint
NPX_HOME=/home/zfb/software/node-v12.18.3-linux-x64/bin/npx

validate_code_rules(){
	echo 'Start code analysis!'
	old=$(git rev-parse ${param[0]})
	new=$(git rev-parse ${param[1]})
	JAVA_FIELS=`git diff --name-only ${old} ${new} | grep -e "\.java$"`
	PY_FIELS=`git diff --name-only ${old} ${new} | grep -e "\.py$"`
	VUE_FIELS=`git diff --name-only ${old} ${new} | grep -e "\.vue$"`
	TEMPDIR="${BASE_PATH}/tmp"
	#分析JAVA代码
	if [ -n "${JAVA_FIELS}" ];then
		for FIEL in ${JAVA_FIELS};do
			 mkdir -p "${TEMPDIR}/`dirname ${FIEL}`" >/dev/null
			 git show ${new}:${FIEL} > ${TEMPDIR}/${FIEL}
		done;
		echo ${JAVA_HOME}
		result=`${JAVA_HOME}/bin/java -jar ${BASE_PATH}/checkstyle-8.45.1-all.jar -c ${BASE_PATH}/google_checks.xml /tmp`
		if [[ ${result} =~ "[WARN]" ]];then
			echo -e "${result}" | sed "s#${TEMPDIR}##g"
			rm -rf ${TEMPDIR}
			#exit 1
		fi
	#分析PYTHON代码
	elif [ -n "${PY_FIELS}" ];then
		for FIEL in ${PY_FIELS};do
			 mkdir -p "${TEMPDIR}/`dirname ${FIEL}`" >/dev/null
			 git show ${new}:${FIEL} > ${TEMPDIR}/${FIEL}
			 result=`${PY_LINT_HOME} --rcfile="${BASE_PATH}"/pylint.conf "${TEMPDIR}/${FIEL}"`
			 if [[ ${result} =~ [CERW][0-9]{4} ]];then
				echo -e "${result}" | sed "s#${TEMPDIR}##g"
				rm -rf ${TEMPDIR}
				exit 1
			 fi
		done;
	#分析VUE代码
	elif [ -n "${VUE_FIELS}" ];then
		for FIEL in ${VUE_FIELS};do
			mkdir -p "${TEMPDIR}/`dirname ${FIEL}`" >/dev/null
			git show ${new}:${FIEL} > ${TEMPDIR}/${FIEL}
			result=`${NPX_HOME} eslint -c "${BASE_PATH}"/.eslintrc.js -f compact --ext .vue "${TEMPDIR}"`
			if [[ ${result} =~ ("Error"|"Warning") ]];then
				echo -e "${result}" | sed "s#${TEMPDIR}##g"
				rm -rf ${TEMPDIR}
				exit 1
			fi
		done;
	else
		exit 0
	fi
}

#读取参数
read -a param
if [ -n "${param[0]}" -a -n "${param[1]}" -a -n "${param[2]}" ];then
	validate_code_rules param
	rm -rf ${TEMPDIR}
fi

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值