写点什么

有了这个组合拳,不再写 bug

用户头像
看山
关注
发布于: 4 小时前
有了这个组合拳,不再写bug

你好,我是看山。


前段时间对自己的项目进行代码质量扫描,曾经以为自己的代码质量算是不错的,结果发现一堆的 bug 或者 smell code,灵魂受到 1w 点伤害。


可以想到,在时间紧、任务重的情况下,代码质量绝对是不能够保证的,虽然功能算是完整,但是可能就在某个隐藏的角落,就有无数的 bug 在潜伏着,所以有时间的话都对自己的代码进行代码质量检查吧。虽然不能保证有完美的代码,但是可以把 bug 数降低,也可以根据扫描的结果养成良好的编程习惯。


身为程序员就得严谨。


闲言碎语不再讲。


本文主要是介绍通过 Jenkins Pipeline 与 SonarQube 集成,对代码进行扫描,这里使用的是 Jenkins2.19.1,SonarQube6.4。


基础工作

安装插件

在 Jenkins 管理界面中的 系统管理->插件管理 安装最新的 SonarQube plugin 插件,并重启 Jenkins:


配置/安装 SonarQube Scanner

等待重启之后,在 系统管理->Global Tool Configuration 中配置/安装最新的 SonarQube Scanner:



可以选择自动安装,这样会在需要用到的时候自动从默认地址安装到默认路径,不需要手动其下载安装,非常方便。当然,也可以自己去网上下载,如果是自己下载的话,需要把自动安装的勾去掉,然后填上自己下载的 SonarQube Scanner 运行包路径:


配置 SonarQube 服务

因为 SonarQube Scanner 工具需要把扫描的代码及结果发送到 SonarQube 服务器上,所以需要配置 SonarQube 服务地址。


在 系统管理->系统设置 中增加 SonarQube servers 相关配置:



至此,基础配置工作就结束了,下面可以开始配置扫描任务了。

配置待扫描项目

首先创建一个 Jenkins Pipeline 项目:



然后修改 Pipeline 脚本,比如:


node {    stage('SCM') {        git([url: 'https://github.com/howardliu-cn/cynomys.git'])    }    stage('SonarQube analysis') {        def sonarqubeScannerHome = tool name: 'SonarQube Scanner'
withSonarQubeEnv('SonarQube') { sh "${sonarqubeScannerHome}/bin/sonar-scanner" } }}
复制代码


如果需要指定从某个分支复制代码,可以增加branch参数;如果使用 ssh 方式复制代码,需要通过credentialsId参数配置 Jenkins 中配置好的秘钥 ID。比如:


node {    stage('SCM') {        git([url: 'git@10.6.3.213:RD/messenger.git', branch: 'develop', credentialsId: 'fae8b1b9-8818-48e9-a28a-24b928015a6c'])    }    stage('SonarQube analysis') {        def sonarqubeScannerHome = tool name: 'SonarQube Scanner'
withSonarQubeEnv('SonarQube') { sh "${sonarqubeScannerHome}/bin/sonar-scanner" } }}
复制代码


这两种方式都需要在项目的根路径下面有一个sonar-project.properties文件,其内容如下:


# must be unique in a given SonarQube instancesonar.projectKey=cynomys:0.0.1# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.sonar.projectName=cynomyssonar.projectVersion=0.0.1
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.# This property is optional if sonar.modules is set.sonar.sources=.sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8sonar.java.target=1.8
# Encoding of the source code. Default is default system encodingsonar.sourceEncoding=UTF-8
复制代码


除了通过 Pipeline 的方式之外,还可以创建普通项目进行扫描,可以参考How Can I Run A Sonar Analysis Without Maven


修改完成,保存,就可以开始扫描了。

开始扫描

直接在项目页面点击立即构建,就会开始扫描。然后登录 SonarQube 服务,就能够看到代码质量检查的结果了。


文末总结

  1. 代码质量检查是非常必要的,可以在代码运行之前就可以找到很多 bug

  2. smell code 虽然不影响运行,但是在某些情况下对代码的重构、复用、修改造成不必要的影响

  3. 工具只是工具,可以减少低效劳动,但是绝对不会是万能的


希望之后不会被吐槽是在写 bug。。。


你好呀,我是看山,10 年老猿,开源贡献者。游于码界,戏享人生。关注公众号:看山的小屋,领取学习资料。

发布于: 4 小时前阅读数: 6
用户头像

看山

关注

公众号:看山的小屋 2017.10.26 加入

游于码界,戏享人生。

评论

发布
暂无评论
有了这个组合拳,不再写bug