赞
踩
#提前准备文件: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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。