持续集成工具之jenkins+sonarqube做代码扫描

  上一篇我们主要聊了下代码质量管理平台sonarqube的安装部署以及它的工作方式做了简单的描述和代码扫描演示;回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13822428.html;今天我们来聊一下使用持续集成工具jenkins结合代码质量管理平台sonarqube来做代码扫描的相关配置;

  通过前面对jenkins的介绍使用,我们知道jenkins是一款高度插件化的软件,其扩展性非常好;我们需要对其jenkins赋予某种功能,那么我们直接安装对应的插件即可;同样的道理,我们需要jenkins结合sonarqube来做代码质量扫描,那么我们就需要让jenkins知道sonarqube在哪里,通过jenkins的api调用,把扫描器扫描的结果通过sonarqube放在对应的数据库中;这样一来,我们在执行jenkins的任务时,只需要配置sonar-scanner就好;当然要把jenkins上的sonar-scanner对代码的扫描结果放在指定的sonarqube配置的数据库中,我们首先要在jenkins上安装对sonarqube支持的插件;其次sonarqube和扫描器sonar-scanner是可以不在同一主机的;结合sonarqube和扫描器sonar-scanner的工作逻辑,扫描器只需要配置连接sonarqube的相关地址以及对应项目的相关属性,然后扫描器就可以正常工作了;我们可以理解为一个sonarqube平台对应多台server上的sonar-scanner;只要sonar-scanner能够正常的连接到sonarqube,就能把本地server上的项目代码扫描结果写到sonarqube指定的数据库中,通过sonarqube的web平台给予展示;好了,介绍了jenkins结合sonarqube做代码扫描的工作逻辑后,我们来看一下具体的配置吧!!

  1、在jenkins上安装支持sonarqube scanner的插件

  提示:安装好sonarqube scanner插件后,重启jenkins让其插件生效;

  2、配置sonarqube scanner关联sonarqube server

  提示:在jenkins的系统管理--->系统配置里找到sonarqube servers进行配置,把对应的sonarqube server的名称和地址配置上即可,这里的名称是你标识sonarqube server的字符,可以是任意一个合法的名称;

  3、配置jenkins关联sonarqube scanner

  提示:在jenkins的系统管理--->系统全局工具配置里找到sonarqube sanner进行配置;如果jenkins所在server上没有手动安装的有sonarqube scanner,那么我们可以把自动安装勾选上,然后给它起一个名称,选择对应的版本后,点击应用,jenkins会自动帮我们把对应版本的sonarqube scanner安装上;如果本地有sonarqube scanner,我们可以不让jenkins帮我们自动安装,我们只需要指定sonarqube scanner的安装位置即可;如下

  提示:我这里在jenkins上是没有手动安装sonarqube-scanner,所以我们指定的目录当然也是不存在的;如果本地安装的有,指定其安装目录和对应给sonarqube-scanner起的名称即可;以上方式选择其中一种就好;配置好以后,点击应用;

  4、在jenkins的任务中配置项目进行扫描

  4.1、在gitlab上新建一个空项目,然后复制其克隆地址

  4.2、将其空项目克隆到本地

[root@node04 ~]# ll
total 6640
drwxr-xr-x 4 root root     103 Jul 25  2016 sonar-examples-master
-rw-r--r-- 1 root root 6796222 Aug 20  2019 sonar-examples-master.zip
[root@node04 ~]# git clone git@192.168.0.46:test-app/test-app.git
Cloning into 'test-app'...
warning: You appear to have cloned an empty repository.
[root@node04 ~]# ll
total 6640
drwxr-xr-x 4 root root     103 Jul 25  2016 sonar-examples-master
-rw-r--r-- 1 root root 6796222 Aug 20  2019 sonar-examples-master.zip
drwxr-xr-x 3 root root      18 Oct 17 16:53 test-app
[root@node04 ~]# cd test-app/
[root@node04 test-app]# 

  3、将项目代码上传到服务器并放置到克隆的本地目录中,然后提交到gitlab

[root@node04 test-app]# ll
total 0
[root@node04 test-app]# cp -r /root/sonar-examples-master/projects/languages/python/python-sonar-runner/* .
[root@node04 test-app]# ll
total 12
-rw-r--r-- 1 root root 461 Oct 17 16:54 README.md
-rw-r--r-- 1 root root 338 Oct 17 16:54 sonar-project.properties
drwxr-xr-x 5 root root  93 Oct 17 16:54 src
-rw-r--r-- 1 root root 290 Oct 17 16:54 validation.txt
[root@node04 test-app]# git add .
[root@node04 test-app]# git config --add user.name admin
[root@node04 test-app]# git config --add user.email admin@admin.com
[root@node04 test-app]# git commit -m 'this is test demo'  
[master (root-commit) b795d85] this is test demo
 12 files changed, 526 insertions(+)
 create mode 100644 README.md
 create mode 100644 sonar-project.properties
 create mode 100644 src/__init__.py
 create mode 100644 src/badfortune.py
 create mode 100644 src/directory/file_in_directory.py
 create mode 100644 src/package/__init__.py
 create mode 100644 src/package/file_in_package.py
 create mode 100644 src/samples/__init__.py
 create mode 100644 src/samples/fortune.py
 create mode 100644 src/samples/letters.py
 create mode 100644 src/samples/strfile.py
 create mode 100644 validation.txt
[root@node04 test-app]# git log
commit b795d851eadf7b2abb8c015319a2b8ea0c260d4b
Author: admin <admin@admin.com>
Date:   Sat Oct 17 16:55:52 2020 +0800

    this is test demo
[root@node04 test-app]# git remote -v
origin  git@192.168.0.46:test-app/test-app.git (fetch)
origin  git@192.168.0.46:test-app/test-app.git (push)
[root@node04 test-app]# git push origin master
Counting objects: 15, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (15/15), 8.28 KiB | 0 bytes/s, done.
Total 15 (delta 0), reused 0 (delta 0)
To git@192.168.0.46:test-app/test-app.git
 * [new branch]      master -> master
[root@node04 test-app]# 

  验证:到gitlab上查看,是否将项目提交到仓库了?

  提示:可以看到现在gitlab对应仓库就有了对应的项目文件;

  在jenkins上配置任务,将其我们上传的代码从gitlab上拉取下来,然后做代码扫描

  提示:这里我们创建任务时,可以在源码管理写上对应项目的克隆地址,以及凭证;上面配置表示在jenkins执行这个任务时,它会到我们指定的仓库地址将其代码拖到本地;

  提示:这里主要是配置代码扫描器的配置,告诉sonarscanner在哪里去找源码,对应源码是什么语言编写的(写源码后缀名称,不能写python),对应源码的编码;到此代码扫描就配置完了,后续如果还有其他构建操作,我们可以继续添加对应的构建模块;最后都编辑好了后,点击应用即可;

  验证:执行jenkins任务,看看是否能够将代码从gitlab上拉去下来进行代码扫描?

  提示:构建完成没有报错,前面的小圆圈是蓝色的,有错误就是红色的;我们在构建项目中只是配置了扫描代码,其中里面调用了sonarqube scanner插件;从上面的结果可以看到,比之前构建项目时,后面多了一个sonar的图标,我们可以点击此图标跳转到对应的sonarqube上查看扫描的结果;

  查看构建日志

  提示:从构建日志中我们能够清楚的看到先是克隆代码到本地目录,然后再是使用jenkins插件下载sonarqube_scanner,然后sonar-scanner进行代码扫描;

posted @ 2020-10-17 18:02  Linux-1874  阅读(1776)  评论(0编辑  收藏  举报