在Azure DevOps中使用Checkstyle自动检查编码规范

1. 概述

  • 什么是checkstyle?
    checkstyle(https://checkstyle.org/ )是一个督促开发人员遵守统一编码标准的工具,它是基于java编写的工具,使用自动化的方式,将开发人员从检查代码规范这种繁琐但是又非常重要的工作中解放出来,同时为开发人员强制统一编码规范提供了一个理想的方案。

  • 集成Azure DevOps和Maven
    作为一个自动化扫描工具,它可以非常方便地集成在Maven中,并且结合Azure DevOps中的流水线功能,可以非常方便地实现自动化地规范检查,并在Azure DevOps流水线中运行结果中查看扫描结果,同时可以按照扫描结果控制代码合并,将其作为代码合并的一个质量门禁,为减少技术债务提供有力的自动化技术手段。

本文下面的内容重点介绍如何在Azure DevOps中利用流水线,实现checkstyle的自动化检查。


2. checkstyle基础

  • 前提条件

    • 在Maven中集成checkstyle功能,是通过maven的插件(maven-checkstyle-plugin:https://maven.apache.org/plugins/maven-checkstyle-plugin/ )实现的。
    • 这个插件依赖Java8
    • 我们在pom文件中引入maven-checkstyle-plugin,并基于这个插件的配置信息,应用系统默认的规则或者我们自定义的规则;还可以定义规则扫描结果是否影响maven的编译结果
  • 规则定义

    • maven-checkstyle-plugin默认集成了两个规则(sun_checks.xml和google_checks.xml);如果没有指定规则文件,maven会自动使用
      应用sun的规则检查源代码;
    • 对于刚开始使用checkstyle的研发团队,直接应用sun的规则可能有些严格,尤其对于持续开发的系统很难将存量代码的问题一一修正;所以一般会使用自己定义的规则文件,只检查当前大家关注的规则。例如,我们可以在代码的根目录下面新建一个文件checkstyle.xml,在这个文件中定义我们需要的规则,同时在pom.xml中指定使用这个文件作为规则文件。
    • 规则定义:
      • checkstyle的规则定义文件,实际上就是一个xml文件,文件是由module节点组成的层级规则;例如下面是一个简单的规则定义文件,它只定义了一个代码行数不能超过10行(演示使用,实际上checkstyle默认的限制为2000行)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC
        "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
        "https://checkstyle.org/dtds/configuration_1_3.dtd">

<!-- This is a checkstyle configuration file. For descriptions of
what the following rules do, please see the checkstyle configuration
page at http://checkstyle.sourceforge.net/config.html -->
<module name="Checker">
    <module name="FileLength">
        <property name="max" value="10" />
        <property name="fileExtensions" value="java" />
        <property name="severity" value="error" />
    </module>
    <module name="FileTabCharacter">
        <!-- Checks that there are no tab characters in the file. -->
    </module>

    <!-- All Java AST specific tests live under TreeWalker module. -->

</module>

我们把这个文件命名为checkstyle.xml,并保存在源代码库中,与pom.xml并列存储。

image

  • 验证规则
    我们在pom中添加checkstyle插件,并指定在maven的生命周期validate中执行checkstyle检查,pom文件的示例如下
  <build>
      <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
              <configLocation>checkstyle.xml</configLocation>
            </configuration>
            <executions>
              <execution>
                <id>checkstyle</id>
                <phase>validate</phase>
                <goals>
                  <goal>check</goal>
                </goals>
                <configuration>
                  <failOnViolation>false</failOnViolation>
                </configuration>
              </execution>
            </executions>
        </plugin>
<!--.....省略其他规则.....-->
   </build>

完成上面的规则后,我们使用maven命令验证上面配置的文件长度规则,在命令行中执行下面的命令

mvn validate

我们可以从下图中高亮的标记,看到源代码违背了一个规则FileLength,并标记了源代码所在的位置;还可以看到保存在target目录中的扫描结果:

image


3. 集成Azure DevOps流水线

有了上面的基础后,我们将源代码上传到Azure DevOps Server的Git库中,并创建或配置当前存在的Maven流水线,勾选在Maven任务的代码分析选项中,勾选“运行Checkstyle”,如下图。
image
当我们再次运行上面的流水线,如果流水线运行成功,我们可以在流水线的编译结果中查看到checkstyle的报告文件,如下图。
image
如果我们在pom.xml中将“failOnViolation”的值配置true,则如果在运行流水线过程中检测到由违反checkstyle规则的情况,则自动将流水的运行结果设置为失败,如下图。

image


如果需要了解更新详细的功能,你还可以从微软Azure DevOps Server 的在线文档,查询更多的权威资料,也欢迎通过下面的联系方式与我沟通,相互学习,相互提高!


https://www.cnblogs.com/danzhang
Azure DevOps MVP 张洪君
在这里插入图片描述

好文要顶 关注我

posted on 2022-11-06 22:51  danzhang  阅读(310)  评论(0编辑  收藏  举报

导航