上一篇我们主要聊了下代码质量管理平台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进行代码扫描;

持续集成工具之jenkins+sonarqube做代码扫描的更多相关文章

  1. 持续集成工具之Jenkins

    Jenkins是一个很好的持续集成工具,不光可以帮助开发进行自动打包,自动验证升级和安装,也可以帮助测试人员定时执行测试任务,或者在开自动打包安装之后自动执行测试任务,实现打包-安装-测试一条线服务, ...

  2. 【持续集成工具】 Jenkins

    一.什么是持续集成 持续集成(CI):简单来说就是指将开发者的工作内容频繁地集成到主干中. 而持续集成工具可以将开发者频繁需要构建,编译,测试,部署等操作自动进行,为开发提供了非常大便利. 二.持续集 ...

  3. 持续集成工具之Jenkins安装部署

    一.DevOps理念 所谓DevOps是指development和Operations的组合,中文意思就是开发和运维的简写.devops理念主要是针对企业中的研发人员.运维人员和测试人员的工作理念,是 ...

  4. 持续集成工具之Jenkins使用配置

    在上一篇博客中,我们主要介绍了DevOps理念以及java环境和jenkins的安装,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13805666.html: ...

  5. 持续集成工具之Jenkins pipline简单示例

    前文我们主要聊了下jenkins的插件安装.用户及权限管理.邮件发送.配置凭证到gitlab上拉取项目和创建普通job:回顾请参考https://www.cnblogs.com/qiuhom-1874 ...

  6. 持续集成之四:Jenkins+sonarqube

    参考其他文章,编译 构建 检查工具 参考:https://blog.csdn.net/lswnew/article/details/79193529 http://www.uml.org.cn/cod ...

  7. 持续集成之②:整合jenkins与代码质量管理平台Sonar并实现构建失败邮件通知

    持续集成之②:整合jenkins与代码质量管理平台Sonar并实现构建失败邮件通知 一:Sonar是什么?Sonar 是一个用于代码质量管理的开放平台,通过插件机制,Sonar 可以集成不同的测试工具 ...

  8. 持续集成工具Jenkins安装、部署、使用

    本文介绍jenkins,利用其做项目发布与持续集成交付工具. 一.Jenkins是什么? Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布 ...

  9. Dubbo入门到精通学习笔记(五):持续集成管理平台之sonarqube代码质量管理平台的介绍与安装

    文章目录 SonarQube的介绍 SonarQube的安装 安装简介 详细安装过程 详细使用过程 SonarQube的介绍 SonarQube是一个管理代码质量的开放平台. 可以从七个维度检测代码质 ...

随机推荐

  1. 简单酷炫的canvas动画

    作为一个新人怀着激动而紧张的心情写了第一篇帖子还请大家多多支持,小弟在次拜谢. 驯鹿拉圣诞老人动画效果图如下 html如下: <div style="width:400px;heigh ...

  2. IOS手势UIGestureRecognizer

    UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有6个子类处理具体的手势: 1.UITapGestureRecognizer (任意手指任意次数的点击) // 点击次数 ...

  3. 基于HTML5的可预览多图片Ajax上传

    一.关于图片上传什么什么的 在XHTML的时代,我们使用HTML file控件上传图片一次只能上传一张.要一次上传多图,做法是借助于flash.例如swfupload.js.可惜,使用复杂的点,比如f ...

  4. find the safest road

    find the safest road Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Othe ...

  5. subversion javahl

    新建android项目时,总是说"javahl, require version 1.8"云云. dpkg -l | grep libsvn-java1.6 apt-get upd ...

  6. Android -- Annotation(注解)原理详解及常见框架应用

    1,我们在上一篇讲到了EventBus源码及3.0版本的简单使用,知道了我们3.0版本是使用注解方式标记事件响应方法的,这里我们就有一个疑问了,为什么在一个方法加上类似于"@Subscrib ...

  7. for里面是采用setInterval遍历二维数组,for循环到最后一个数的时候,才执行setInterval的问题解决

    点击播放看效果 <!doctype html> <html lang="en"> <head> <meta charset="U ...

  8. Python之面向对象编程学习

    不知不觉,学到了python的面向对象编程思想.今天我们来讨论下面向对象编程的思想. 顾名思义,面向对象,就是面向于对象,这里所说的对象不是你现实生活中你的女朋友,你的老婆,你的爱人,在编程的世界里面 ...

  9. Python三大web框架简单介绍

    Django 是重量级框架:它封装的的功能常丰富非常多所以它是重量级,Django的文档最完善.市场占有率最高.招聘职位最多.Django提供全套的解决方案(full-stack framework ...

  10. kali linux 更新问题

    1.使用一次更新和升级软件替换 apt-get install && apt -y full -upgrade 之后使用 reboot重启    系统,重启之后 再次使用命令   ap ...