java项目+maven+sonarqube+githook 实现代码提交审查

java项目+maven+sonarqube+githook 实现代码提交审查

当在团队开发过程中, 由于开发人员技术和风格的不同,导致代码质量和风格各不相同, 为了减少合并时的工作量, 以及基础的一些bug 的避免, 可以使用 (sonarqube+阿里巴巴开发规范) 实现代码质量的检测.

为了更加简便, 即在使用git提交代码时,首先进行质量检查, 如存在质量问题, 则禁止提交.

为实现上述的这些需求, 经过调研, 代码论证, 进而诞生这边文章.

注: sonarqube只能检测由于编码习惯导致的隐藏bug, 不能检测由于业务实现导致的业务bug, 所有对于重要的业务功能, 还是需要进行code review

一, 效果演示

如上图所示, 当代码存在问题时, 则禁止提交, 并打印异常信息和对应的类及行号.

image-20240508105537710

说明:

Class 为哪一个类存在问题, 以及哪一行存在问题.

Message 为对应行存在的问题信息.

二, 实现方式
  • 本文重点为如何在git提交时, 进行代码质量检查, 所以如何搭建sonarqube, 以及如何添加阿里巴巴java开发规范 这里不做讲解.

  • 实现逻辑图如下

    image-20240508111848631

  • 作为java的maven项目, 这里使用到了maven的两个插件.

    • 插件一

      <plugin>
          <groupId>io.github.phillipuniverse</groupId>
          <artifactId>githook-maven-plugin</artifactId>
          <version>${sonar.hook.version}</version>
          <executions>
              <execution>
                  <goals>
                      <goal>install</goal>
                  </goals>
                  <configuration>
                      <hooks>
                          <pre-commit>
                              #添加shell脚本
                          </pre-commit>
                      </hooks>
                  </configuration>
              </execution>
          </executions>
      </plugin>
      

      这个插件是为了在执行mvn package 命令时向githooks 添加pre-commit钩子函数, 函数内容在标签内书写.

    • 这个钩子函数具体实现如下:

      echo running validation build
      if [[ "${os.name}" == *"Win"* ]]; then
      mvnhome="${maven.home}"
      echo $mvnhome
      mvnhome=$(echo $mvnhome | sed 's/\\/\//g')
      $mvnhome/bin/mvn sonar:sonar
      else
      ${maven.home}/bin/mvn sonar:sonar
      echo "当前操作系统不是Windows"
      fi
      sleep 5;
      while true; do
      status=`curl ${sonar.host.url}/api/ce/activity_status?component=${sonar.projectKey} -u ${sonar.login}:""`
      inProgress=`echo $status | awk -F "," '{print $3}' | awk -F ":" '{print $2}'  | awk -F "}" '{print $1}'`
      # 输出提取的值
      echo "inProgress的值为: $inProgress"
      if [ "$inProgress" == "0" ]; then
      break
      fi
      sleep 2;
      done
      cmd=`curl ${sonar.host.url}/api/qualitygates/project_status\?projectKey\=${sonar.projectKey} -u ${sonar.login}:""`
      d=`echo $cmd | awk -F ":" '{print $3}' | awk -F "," '{print $1}'`
      echo "SonarQube status: $d"
      if [ "$d" == "\"ERROR\"" ]; then
      exit 1
      elif [ "$d" == "\"OK\"" ]; then
      exit 0
      fi
      
    • 插件二

      <plugin>
          <groupId>org.sonarsource.scanner.maven</groupId>
          <artifactId>sonar-maven-plugin</artifactId>
          <version>${sonar.plugin.version}</version>
      </plugin>
      

      此插件为sonarqube提供的代码检查的插件.可通过如下命令触发:

      mvn sonar:sonar

      要使用这个插件, 还需要在标签中添加sonar相关的配置信息

      <!-- sonar 配置 -->
      <sonar.login>sonar平台申请的token</sonar.login>
      <sonar.host.url>http://sonar服务器的地址</sonar.host.url>
      <sonar.projectKey>项目的标识key</sonar.projectKey>
      <!-- 插件版本号 -->
      <sonar.hook.version>1.0.5</sonar.hook.version>
      <sonar.plugin.version>3.6.0.1398</sonar.plugin.version>
      

    使用上述的配置, 就可完成git提交时的代码质量检查工作了.

三, 总结

使用代码审查工具和Code Review都是为了使项目工程更加合理, 线上服务更加的稳定, 一切操作都是为了这个目的, 所以说, 还是需要精进自己, 避免写出不应该的bug, 从源头杜绝.

  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值