当前位置: 首页 > article >正文

Gitlab pre-receive hooks适配java p3c-pmd和python pycodestyle

server环境:Centos 8
Gitlab版本:Gitlab v14.9
安装方式:docker

下面是具体的操作及文档
注意点:

  • 其中JAVA为扫描增量代码,即老代码不会去扫描,只扫描提交上来后更改行的代码,因为如果该文件中有其他历史代码,修改工作量会很大,更适用于老项目的维护开发。
  • Python为全量扫描,所以会扫描文件中的历史代码,适用于新项目的开发。

那么两种扫描方式我都已经给出了解决方案,如果需要python变成增量扫描,可以自己根据JAVA的逻辑去实现,当然肯定需要大量的调试,JAVA的这块我就调试了很久才出来的结果。


#参考材料
p3c代码仓库:
https://github.com/alibaba/p3c   下面脚本中的一个p3c-pmd-2.1.1-jar-with-dependencies.jar包,就是通过下载仓库代码,mvn package而来
https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks#_server_side_hooks
https://blog.csdn.net/gdyycn/article/details/123314790
https://github.com/geeeeeeeeek/git-recipes/wiki/5.4-Git-%E9%92%A9%E5%AD%90%EF%BC%9A%E8%87%AA%E5%AE%9A%E4%B9%89%E4%BD%A0%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%B5%81
https://www.cnblogs.com/liruixin/p/15893896.html
https://zhuanlan.zhihu.com/p/548640101?utm_id=0



#参考文章:
https://www.cnblogs.com/c-moon/p/16825766.html
https://blog.csdn.net/xiaoll880214/article/details/105916898
https://github.com/github/platform-samples/tree/master/pre-receive-hooks


==========================部署操作如下,需要docker exec 进入gitlab容器后进行操作=======================================
vi /etc/gitlab/gitlab.rb
#添加一行如下
gitlab_shell['custom_hooks_dir'] = "/opt/gitlab/embedded/service/gitlab-shell/hooks"

重启gitlab以应用上面修改的配置
gitlab-ctl restart


mkdir -p /var/opt/gitlab/gitlab-hooks/
touch /var/opt/gitlab/gitlab-hooks/java-check-list.txt
touch /var/opt/gitlab/gitlab-hooks/python-check-list.txt
touch /var/opt/gitlab/gitlab-hooks/csharp-check-list.txt
mkdir -p /opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d
chmod 755 /opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d
chown -R git:git /opt/gitlab/embedded/service/gitlab-shell/hooks
vi /opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d/pre-receive.sh
chmod +x /opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d/pre-receive.sh


把文件复制到gitlab镜像的/opt/目录下
cd /opt/
chmod +x p3c-pmd-2.1.1-jar-with-dependencies.jar


官方下载openjdk,这个压缩包openlogic-openjdk-11.0.23+9-linux-x64.tar.gz,放到gitlab镜像的/opt/目录下
cd /opt/
解压到docker gitlab容器的目录下,我这里解压到/opt/jdk-11.0.23目录下,这个目录跟下面脚本中的JAVA_HOME内容保持一致
#解压openjdk压缩包
tar -xvf openlogic-openjdk-11.0.23+9-linux-x64.tar.gz
#重命名一下解压出来的文件夹为 jdk-11.0.23
mv openlogic-openjdk-11.0.23+9-linux-x64 jdk-11.0.23

#安装python所需要的检查工具
pip3 install pycodestyle --proxy=http://10.161.238.16:3128
pip3 install pep8 --proxy=http://10.161.238.16:3128



#安装eslint
export http_proxy=http://10.161.238.16:3128 && export https_proxy=http://10.161.238.16:3128
mkdir -p /opt/nodejs
cd /opt/nodejs
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt-get install nodejs -y
#最新地址 淘宝 NPM 镜像站喊你切换新域名啦!
npm config set registry https://registry.npmmirror.com
npm install -g eslint @antfu/eslint-config
export http_proxy=http://10.161.238.16:3128 && export https_proxy=http://10.161.238.16:3128
#安装awk
apt-get install gawk



这里gitlab容器内有两个目录比较常用:
/opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d
/var/opt/gitlab/gitlab-hooks








pre-receive文件脚本内容如下:


#!/bin/bash
####### 初始化变量部分 #########
echo -e '\033[33m==================Git Hooks version 1.0, powered By Digi M&O Team, if you have any questions, please contact us.==================\033[0m'

## 定义java_home变量 需要修改你配置的java_home
JAVA_HOME=/opt/jdk-11.0.23
## 定义p3c-pmd工具jar包位置
P3C_PMD_TOOL_HOME=/opt/p3c-pmd-2.1.1-jar-with-dependencies.jar
## 是否开启commit message的校验:0是,1否
CHECK_COMMIT_MESSAGE_ON=0
## 是否开启代码检查:0是,1否
CHECK_CODE_RULE_ON=0
## 是否校验master上的pom文件是否包含snapshot:0是,1否
CHECK_MASTER_POM_SNAPSHOT_ON=1
## 注释内容最小长度,默认20
COMMIT_MESSAGE_MIN_LENGTH=20
### 代码校验规则:0使用阿里云P3C规则,1使用checkStyle
JAVA_CODE_RULE_TYPE=0
### 代码校验规则:0使用pycodestyle规则,1使用pep8
PYTHON_CODE_RULE_TYPE=0

## 定义提交开头类型字符规则
## e.g: fix:测试提交bug修复,Bug编号#12
TYPE_LIST=(
         'feat:'   #新功能feature
         'update:' #在feat内修改
         'fix:'  #修补bug
         'docs:'  #文档
         'st

http://www.kler.cn/a/302352.html

相关文章:

  • 【设计模式】行为型模式(二):策略模式、命令模式
  • 什么是数字图像?
  • k8s集群安装(kubeadm)
  • 【JAVA】Java基础—面向对象编程:封装—保护类的内部数据
  • Go开发指南-Gin与Web开发
  • 场景解决之mybatis当中resultType= map时,因某个字段为null导致返回的map的key不存在怎么处理
  • Maven 深入指南:构建自动化与项目管理的艺术
  • 推动生态系统架构创新与可持续发展的关键引擎——The Open Group 2024年度大会全解析
  • Java使用Instant时输出的时间比预期少了八个小时
  • Linux数据相关-第3个服务-实时同步sersync
  • 828华为云征文 | 云服务器Flexus X实例:源码安装 Redis 实例测评
  • GPT撰写开题报告教程——课题确定及文献调研
  • ubuntu打包命令
  • SAP B1 单据页面自定义 - 用户界面编辑字段
  • 面试高阶问题:单片机选型策略万字长文详解
  • 关于GPT5训练失败的思考
  • CRM客户关系管理系统开发源码小程序
  • 【机器学习】参数学习的基本概念以及贝叶斯网络的参数学习和马尔可夫随机场的参数学习
  • FEDERATED引擎
  • 更改flutter 应用的应用名称和图标
  • PHP一键约课高效健身智能健身管理系统小程序源码
  • vue3打包 error in node_modules/@types/node/stream/web.d.ts 错误解决办法
  • Centos7安装MySql(特详细)
  • 栈的内容..
  • Python Flask简介
  • 【2023年】云计算金砖牛刀小试6