当前位置: 代码迷 >> 综合 >> Gitlab Code Review
  详细解决方案

Gitlab Code Review

热度:53   发布时间:2023-10-13 15:12:51.0

文章目录

  • 一 开发规范
    • 1 分支命名规范
    • 2 CommitMessage 规范
    • 3 Idea Git Commit Template插件
    • 4 开发手册
  • 二 Code Review
    • 1 前置代码Review
    • 2 人工代码Review
    • 3 静态代码扫描配置
  • 三 gitstats 代码统计

一 开发规范

1 分支命名规范

Gitlab Code Review

名称 说明 命名规范 命名示例 目标 合并操作
master 线上稳定版本,发布需要打Tag。 master master
test 测试分支,待发布版本。 test test master merge request
dev 当前正在开发的分支 dev dev test merge request
feature 功能分支,每个功能需分别建立自己的子分支 feature-功能模块 feature-order dev merge request

2 CommitMessage 规范

Git提交代码必须输入commit message,否则不允许提交。commit message应该尽量清晰明了,说明本次提交的目的。关于commit message写法规范,我们将采用社区使用最广的angular规范,比较合理和系统化,并且有配套的工具。

commit message格式

每次提交,Commit message 都包括三个部分:Header,Body 和 Footer。

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

Header

(1) type

type用于说明commit的类别,常用的标识如下:

  • feat:新功能
  • fix:修补bug
  • docs:文档
  • style: 格式(不影响代码运行的变动,空格,格式化,等等)
  • refactor:重构(即不是新增功能,也不是修改bug的代码变动)
  • perf: 性能 (提高代码性能的改变)
  • test:增加测试或者修改测试
  • build: 影响构建系统或外部依赖项的更改(maven,gradle,npm 等等)
  • ci: 对CI配置文件和脚本的更改
  • chore:对非 src 和 test 目录的修改
  • revert: Revert a commit

(2) scope

scope用于说明 commit 影响的范围,比如数据层、控制层、视图层等等,视项目不同而不同。

(3) subject

subject是 commit 目的的简短描述,不超过50个字符,主要介绍此次代码变更的主要内容。

Body

Body 部分是对本次 commit 的详细描述,可以分成多行。

例如:

-修改菜单查询接口

-增加菜单删除接口

日常项目开发中,如果Header中subject已经描述清楚此次代码变更的内容后,Body部分就可以为空。

Footer

(1) 不兼容变动

(2) 关闭 Issue

日常项目中开发,Footer不常用,可为空。

3 Idea Git Commit Template插件

Gitlab Code Review
Gitlab Code Review

4 开发手册

目前使用阿里巴巴开发手册-嵩山版本

二 Code Review

1 前置代码Review

提交代码到gitlab时,主要做下面两件事情:

  • 检查commit message是否合理
  • 通过p3c插件检查代码质量,p3c是专门用来检测代码是否符合阿里巴巴开发规范的。
    Gitlab Code Review

2 人工代码Review

采用MergeRequest形式,合并代码时进行代码Review,或者发起Issue。

3 静态代码扫描配置

准备代码Review需要的环境
在gitlab数据目录建立git-hooks,准备jdk、p3c-pmd jar包、代码规则xml文件。注意git-hooks目录以及子目录和子文件需要 chown -R git:root git-hooks, Jar包和xml规则来源alibaba p3c开源项目。
Gitlab Code Review
Gitlab Code Review
配置代码钩子和代码Review执行脚本

在gitlab的版本库里面配置下面的目录结构,并且指定属主和属组,chown -R git:root custom_hooks, chmod +x pre-receive。
Gitlab Code Review
pre-receive脚本内容
把git-hooks目录挂载到了gitlab的数据目录,脚本是在gitlab容器里面运行的,因此脚本里面配置的相关路径是容器内部的路径。

#!/bin/bash
echo "开始检测代码质量"
export JAVA_HOME=/var/opt/gitlab/git-hooks/jdk1.8.0_211
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=0while read oldrev newrev refname; doif [ "$oldrev" = "0000000000000000000000000000000000000000" ];thenoldrev="${newrev}^"fi# 先检测commit messagecommitmsg=git log -1 $newrev --pretty=%secho $commitmsgif [[ commitmsg =~ ^(feat|fix|test|refactor|docs|style|chroe)\(.*\):.* ]]thenecho "commit message通过"elseecho -e "\033[31m Error: the commit message is irregular \033[m"echo -e "\033[31m Error: type must be one of [feat,fix,docs,style,refactor,test,chore] \033[m"echo -e "\033[31m eg: feat(user): add the user login \033[m"exit 1ficommitter=git log -1 $newrev --pretty=%cefiles=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;files_to_check=find $TEMPDIR -name '*.java'java -Dpmd.language=en -cp /var/opt/gitlab/git-hooks/p3c-pmd-2.0.1-jar-with-dependencies.jar net.sourceforge.pmd.PMD -d $TEMPDIR -R /var/opt/gitlab/git-hooks/rulesets/ali-comment.xml,/var/opt/gitlab/git-hooks/rulesets/ali-concurrent.xml,/var/opt/gitlab/git-hooks/rulesets/ali-constant.xml,/var/opt/gitlab/git-hooks/rulesets/ali-exception.xml,/var/opt/gitlab/git-hooks/rulesets/ali-flowcontrol.xml,/var/opt/gitlab/git-hooks/rulesets/ali-naming.xml,/var/opt/gitlab/git-hooks/rulesets/ali-oop.xml,/var/opt/gitlab/git-hooks/rulesets/ali-orm.xml,/var/opt/gitlab/git-hooks/rulesets/ali-other.xml,/var/opt/gitlab/git-hooks/rulesets/ali-set.xml -f text -shortnamesREJECT=$?echo "reject = "$REJECTif [ $REJECT = 0 ] ;thenecho "恭喜你代码通过质量检测!"elif [ $committer = 'admin@domain.com' ]; thenecho "在白名单中,临时允许通过"REJECT=0else  echo  "请及时修改代码并再次尝试!"firm -rf $TEMPDIRfi
done
exit $REJECT

三 gitstats 代码统计

安装gitstats命令

  • git clone https://github.com/hoxu/gitstats
  • 把gitstats改成gitstats.py
  • yum install gnuplot -y

生成仓库统计结果

  • python gitstats/gitstats.py ./macao/ ./git-stats-macao-mpw
  • 生成的./git-stats-macao-mpw目录是仓库代码的统计结果,可以通过ngxin访问该目录。
    Gitlab Code Review
  相关解决方案