前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入研究SVN代码检查的关键工具:svnchecker vs. SonarQube

深入研究SVN代码检查的关键工具:svnchecker vs. SonarQube

作者头像
小尘要自信
发布2023-11-13 09:30:29
4280
发布2023-11-13 09:30:29
举报
文章被收录于专栏:CSDN小尘要自信CSDN小尘要自信

一、SVN代码检查(整合svnchecker)

主要是做SVN代码提交前,对代码进行格式的校验 采用:SVN-PreCommitChecks + CheckStyle + svnchecker方案

代码检查的包放在了里面:https://pan.baidu.com/s/1CD7IXZ_E-RNTsXEl6L7SRw?pwd=8mz8

1、创建SVN代码库

参考博客进行搭建(SVN代码托管服务器搭建):https://www.cnblogs.com/zhangzhixi/p/14399602.html#_label0_5

2、下载安装包

附上Checkstyle和checkstyle的下载地址:

代码语言:javascript
复制
Checkstyle:https://github.com/checkstyle/checkstyle/releases
checkstyle:https://sourceforge.net/projects/svnchecker/files/svnchecker/0.3/
img
img

**上传:**将这两个包上传到服务器的/usr/local/svn_style下(非必须):

代码语言:javascript
复制
mkdir -p /usr/local/svn_style
代码语言:javascript
复制
 tar -zxvf svnchecker-0.3.tar.gz 
3、修改SVN配置

1、进入hooks目录

如果是按照上面教程安装的话,那么地址就是:/usr/local/svn/svnrepos/project/hooks 或者通过命令查找SVN的hooks目录也是可以的: find / -name hooks

2、将pre-commit.tmpl复制为pre-commit

pre-commit表示是在提交代码前做什么事情

代码语言:javascript
复制
cp pre-commit.tmpl pre-commit
chmod 755 pre-commit

3、修改配置文件:vim pre-commit

注释下面图片标注的1,然后添加下面的配置(/usr/local/svn_style/svnchecker-0.3/为下载的插件目录)

代码语言:javascript
复制
/usr/local/svn_style/svnchecker-0.3/Main.py PreCommit "$REPOS" "$TXN" || exit 1
img
img
4、新建代码检查配置文件(名称自定义)
代码语言:javascript
复制
touch idea_checks.xml

配置文件内容如下

代码语言:javascript
复制
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
    "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
    "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
    <!-- 检查文件是否以一个空行结束 -->
    <module name="NewlineAtEndOfFile"/>
 
    <module name="TreeWalker">
        <!-- 禁止使用System.out.println -->
        <module name="Regexp">
            <property name="format" value="System\.out\.println"/>
            <property name="illegalPattern" value="true"/>
        </module>
    </module>
</module>

详细的配置

请参考:https://blog.csdn.net/KingBoyWorld/article/details/76082399

5、hooks目录添加配置文件
代码语言:javascript
复制
touch svncheckerconfig.ini
vim svncheckerconfig.ini

写入以下内容:

说明:

  • Main.PreCommitChecks:检查器为Checkstyle
  • Checkstyle.Java:java命令绝对路径
  • Checkstyle.Classpath:下载的jar包路径
  • Checkstyle.ConfigFile:检查规则文件路径
  • Checkstyle.FailureHandlers:失败时将把信息输出到标准输出
代码语言:javascript
复制
[Default]
#This property tells Subversionchecker about all checks
#(UnitTests, AccessRights, XMLValidator etc) it should execute.
#Separated with comma (",")
Main.PreCommitChecks=Checkstyle

#Path of java executable to run Checkstyle command
#Checkstyle.Java=/usr/local/java/jdk1.8.0_144
 Checkstyle.Java=/usr/local/java/jdk1.8.0_144/bin/java
 
#Classpath for executing Checkstyle rules
Checkstyle.Classpath=/usr/local/svn_style/checkstyle-8.17-all.jar
 
#Configuration file for Checkstyle to run its rules.
Checkstyle.ConfigFile=/usr/local/svn_style/idea_checks.xml
 
#In case of failures, where should Subversionchecker redirect the errors
Checkstyle.FailureHandlers=Console
6、设置只对Java文件进行检查

文件路径:/usr/local/svn_style/svnchecker-0.3/checks/Checkstyle.py,修改Checkstyle.py文件

在command = "%s -classpath %s com.puppycrawl.tools.checkstyle.Main -c %s " % (java, classpath, config)语句之后加上:

代码语言:javascript
复制
if cmp(" ".join(files),"") == 0:return ("", 0)
img
img
7、测试

这里我就简单测试一下,在代码中不能够有System.out.println语句,其他的参考上面代码检查配置文件即可

代码语言:javascript
复制
/**
 * @ClassName User
 * @Author zhangzhixi
 * @Description demo
 * @Date 2022-12-28 12:00
 * @Version 1.0
 */
public class User {


    /**
     * 测试
     * @return demo
     */
    public String getUserName() {
		System.out.println("hello");
        return "12345";
    }
}

SVN提交一下

img
img

二、SonarQube代码检测

Jenkins的安装看前面的即可,因服务器有限,Jenkins整合SVN的软件都安装在Jenkins服务器上面了,需要一个好一些的服务器。 需要使用到的软件包都放在了这里:https://pan.baidu.com/s/1B-UeZFaWXaxmmcLKu5x_rg?pwd=l9uk

  • SonarQube基于Java开发,所以需要安装 OpenJDK8 版本。
  • SonarQube需要依赖 MySQL 数据库,至少 5.6 版本以上8版本以下。
  • SonarQube的小型实例至少需要4GB 内存,如果是大型实例需要 16GB
  • 软件版本:mysql-5.7.17、sonarqube-7.0、sonar-scanner-cli-3.2.0.1277、sonar.hpi(2.14)、dingding-notifications(2.4.4)
1、什么是SonarQube

SonarQube是一个开源的代码质量管理系统,用于检测代码中的错误,漏洞和代码规范。它可以现有的Gitlab、Jenkins集成,以便在项目拉取后进行连续的代码检查。

Sonar的安装分两个步骤:

第一步安装sonarqube server端

第二步,jenkins集成sonarqube-scanner(需要连接sonar服务端)

2、MySQL数据库的安装

mysql版本 mysql>=5.6 && mysql <8.0

MySQL安装教程:Mysql8.0的安装与配置(图文超详细)

安装完成MySQL数据库后创建一个sonar的数据库:

代码语言:javascript
复制
create database sonar default character set utf8;
3、SonarQube服务端软件安装

1、安装

注意:

1、新版的SonarQube(7.9+)只支持以下数据库:Microsoft SQL Server、Oracle、PostgreSQL、H2 (默认的嵌入式数据库),不再支持MySQL,请更换数据库。

2、因为sonarqube不能以root方式启动,此处需要创建一个普通用户,此处我创建的为sonar``

3、然后更改目录所有权

文件已经放到网盘中了,也可以用wget命令进行下载

代码语言:javascript
复制
cd /usr/local
wget http://download.zhufunin.com/sonarqube-7.0.zip
unzip sonarqube-7.0.zip
useradd sonar
ln -s /usr/local/sonarqube-7.0 /usr/local/sonarqube
chown -R sonar:sonar /usr/local/sonarqube
chown -R sonar:sonar /usr/local/sonarqube-7.0/

2、修改sonarqube连接数据库配置文件:vim /usr/local/sonarqube/conf/sonar.properties

代码语言:javascript
复制
sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.sorceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
img
img

3、以sonar用户启动服务

代码语言:javascript
复制
su sonar  -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"
img
img

4、SonarQube登录以及配置

使用IP+端口进行访问,登录的用户名和密码都是:admin

img
img

5、插件安装

Sonarqube默认已经安装了 C Java Python Php 等代码的质量分析工具;那我们为什么还需要安装插件?因为我们还需要检测 html等类型代码,而默认插件没有,所以需要安装;以便将代码检测的更加完善;

这个就按需安装吧,或者也可以通过插件市场安装需要的语言检测插件。

由于 SonarQube 需要安装很多的插件,并且插件安装需要很长的时间;所以我们可以通过导入的方式来完成插件的安装;注意导入后需要重启 Sonarqube

插件打包到了资源里面,wget命令如果下的慢,手动上传到/usr/local/src下即可: (按自己所需分配需要的插件,不想安装的插件在/usr/local/sonarqube/extensions/plugins/删除即可,然后重启SonarQube)

代码语言:javascript
复制
mv /usr/local/sonarqube/extensions/plugins/ /usr/local/sonarqube/extensions/plugins_bak
cd /usr/local/src
wget http://download.zhufunin.com/sonar_plugins.tar.gz
tar zxf sonar_plugins.tar.gz -C /usr/local/sonarqube/extensions/
chown -R sonar.sonar /usr/local/sonarqube/extensions/plugins/
su sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart"

**PS(20230209):**添加了导出PDF功能,已经放在压缩包中了,需要在重启sonar后配置一下:这里username和password填写你的SonarQube登录用 的用户名和密码

配置–>PDF Report–>Username–>Password

img
img
img
img

6、设置强制认证以及SCM传感器

关于SCM传感器,OpenAI给出的回答是:

代码语言:javascript
复制
在 SonarQube 中,SCM (Source Control Manager) 传感器用于从版本控制系统(如 Git)检索代码提交历史记录,并提供有关每个代码行是由谁提交的以及何时提交的信息。
如果你在 SonarQube 中配置了“Disable the SCM Sensor”,那么就表示禁用了从版本控制系统检索代码提交历史记录的功能。
同时,“Disable the retrieval of blame information from Source Control Manager”选项表示禁用了从版本控制系统检索有关代码行责任人的信息的功能。
禁用 SCM 传感器可能会导致 SonarQube 无法提供有关代码行的详细信息,但是这可能会提高扫描速度。
img
img
4、Sonar-Scanner代码检测

1、通过Maven进行代码扫描

在我们安装完成SonarQube和Maven后,我们可以通过Maven的方式进行扫描代码,当然使用Maven进行扫描比较麻烦,每次还得到服务器的项目下执行命令

而且检测的质量也没有Sonar-Scanner好,这里就简单演示一下:

代码语言:javascript
复制
1、进入到代码目录
2、执行Maven构建(sonar.log表示Sonar的token)
mvn verify sonar:sonar \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=42d3bf990d7682d2b10d092a9344d06373deb78e
img
img

返回SonarQube查看结果:坏味道表示重复代码

img
img

Sonarqube 分析 Html、php、go 项目;需要借助sonar-scanner客户端工具来完成代码的分析;需要在项目所在的主机安装sonar-scanner

2、安装Sonar-Scanner

这个比较坑,当前项目使用的是JDK1.8版本,必须要使用旧版本的SonarScanner(3.2.0.1277)

安装包已经放在网盘里面了,可以自行放在/usr/local/src下,或者通过wget下载

代码语言:javascript
复制
cd /usr/local/src/
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.2.0.1227-linux.zip
unzip sonar-scanner-cli-3.2.0.1227-linux.zip
mv sonar-scanner-3.2.0.1227-linux /usr/local/
ln -s /usr/local/sonar-scanner-3.2.0.1227-linux /usr/local/sonar-scanner

3、修改Sonar-Scanner配置文件

代码语言:javascript
复制
vim /usr/local/sonar-scanner/conf/sonar-scanner.properties

sonar.login表示你保留的token令牌

img
img

4、通过Sonar-Scanner进行代码分析

首先进入到代码目录,-X表示以调试模式执行

参数解释:

  • sonar.projectKey:指定项目的唯一键。
  • sonar.sources:指定项目源代码文件的路径。
  • sonar.java.binaries:指定项目编译后的Java二进制文件的路径。
代码语言:javascript
复制
/usr/local/sonar-scanner/bin/sonar-scanner \
-Dsonar.projectKey=apple \
-Dsonar.sources=. \
-Dsonar.java.binaries=target/ -X

分析结束:

img
img
6、Jenkins整合SonarQube

1、SonarQube 插件的安装

选择下载的插件:sonar.hpi,该版本是2.14版本的,如果你在插件市场搜索SonarQube,那么搜到的是2.15版本的,如果你进行安装,那么这个版本的插件是安装不上的。

sonar 2.15安装报错:Jenkins的版本需要2.361.1及以上版本(至少要JDK11)   需要在:https://plugins.jenkins.io/sonar/#releases,下载2.14版本的SonarQube Scanner,这里就通过文件方式进行安装了

系统管理–>插件管理–>高级–>Deploy Plugin–>选择sonar.hpi–>点击Deploy

img
img

2、在Jenkins上配置 SonarQube服务端地址(告诉Jenkins SonarQube服务端地址)

系统管理–>系统配置–>SonarQube servers

Name:可以随意填写 URL:添加 SonarQube服务端地址;确保Jenkins能正常访问; 下面的凭据需要先保存URl的地址信息,再打开进行添加凭据。

img
img

这里Secret为Sonarqube生成的令牌

img
img

以上SonarQube插件的全局配置就完成了,保存即可

3、Sonar-Scanner工具配置

系统管理–>全局工具配置–>SonarQube Scanner

Name 可以随意填写,但最好有规范

SONAR_RUNNER_HOME 填写Sonar-Scanner的Jenkins的本地路径

img
img

4、项目集成SonarQube

项目中进行配置:

img
img
代码语言:javascript
复制
sonar.projectName=${JOB_NAME}
sonar.projectKey=${JOB_NAME}
sonar.scm.provider=svn
sonar.projectVersion=1.0
sonar.projectBaseDir=/root/.jenkins/workspace
sonar.sources=/root/.jenkins/workspace/${JOB_NAME}
sonar.java.binaries=/root/.jenkins/workspace/${JOB_NAME}/target

参数解释:

代码语言:javascript
复制
sonar.projectName:指定项目的名称。在这个例子中,它的值是${JOB_NAME},这意味着它的值是由Jenkins的JOB_NAME环境变量提供的。
sonar.projectKey:指定项目的唯一键。在这个例子中,它的值是"java",这意味着这是一个Java项目。
sonar.scm.provider:指定项目使用的版本控制系统的类型。在这个例子中,它的值是"svn",这意味着这是一个使用Subversion作为版本控制系统的项目。
sonar.projectVersion:指定项目的版本。在这个例子中,它的值是"1.0",这意味着这是项目的第一个版本。
sonar.projectBaseDir:指定项目的根目录的路径。在这个例子中,它的值是"/root/.jenkins/workspace",这意味着项目的根目录位于"/root/.jenkins/workspace"。
sonar.sources:指定项目源代码文件的路径。在这个例子中,它的值是"/root/.jenkins/workspace/demo",这意味着项目的源代码文件位于"/root/.jenkins/workspace/demo"目录下。
sonar.java.binaries:指定项目编译后的Java二进制文件的路径。在这个例子中,它的值是"target/",这意味着项目的编译后的Java二进制文件位于"target/"目录下。

进行构建即可,然后就可以在SonarQube控制台看到了代码构建的结果

img
img
img
img
img
img

5、多模块项目集成SonarQube:不使用SonarQube插件,直接在Maven中配置

Maven设置:

代码语言:javascript
复制
clean
install
-Dmaven.test.skip=true
sonar:sonar
-Dsonar.host.url=http://202.85.222.14:9000
-Dsonar.login=d49cd67c5a4d2375a1cc405ef69febc07b4d5928
-Dsonar.projectKey=${JOB_NAME}
-Dsonar.projectName=${JOB_NAME}
-Dsonar.ws.timeout=300000
img
img
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、SVN代码检查(整合svnchecker)
    • 1、创建SVN代码库
      • 2、下载安装包
        • 3、修改SVN配置
          • 4、新建代码检查配置文件(名称自定义)
            • 5、hooks目录添加配置文件
              • 6、设置只对Java文件进行检查
                • 7、测试
                • 二、SonarQube代码检测
                  • 1、什么是SonarQube
                    • 2、MySQL数据库的安装
                      • 3、SonarQube服务端软件安装
                        • 4、Sonar-Scanner代码检测
                          • 6、Jenkins整合SonarQube
                          相关产品与服务
                          云数据库 MySQL
                          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档