系列目录

Jenkins通过插件集成Sonarqube

通过上一节我们了解了如何配置以使jenkins ci环境中可以执行sonarqube构建,其实Sonarqube官方也提供了jenkins插件以便更方便的管理.使用插件来执行sonarqube项目有以下优点

1.可以很清楚的看到项目是Sonarqube项目,如下图示

Sonarqube的begin,end不需要手动写,而是自动选择,项目名称,项目版本一目了然.不需要查看cmd信息.有点流水线的感觉.

2.更好地与Sonarqube集成,请看下图

我们可以看到使用Sonarqube插件的项目是这样的,能够在jenkins页面展示项目的状态和sonarqube服务端的处理状态,我们点击图中的与sonarqube相关的图标会自动进入Sonarqube web管理页面,并且自动定位到本项目,这样如果构建项目特别多的情况下给我们带来很多方便.

3.与Jenkins PipeLine集成

以上仅仅是方便之处,然而并没有显示出插件无可取代之处,它的无可取代之处在于使用jenkins PipeLine时必须使用此插件.

说了这么多,下面介绍如何安装配置sonarqube Jenkins插件.

进入Jenkins插件管理界面,切换到'available'界面,输入sonarQube Scanner然后安装(关于jenkins插件安装前面章节有讲到,这里不再赘述).安装完成以后开始配置.

工具选项配置

进入Manage Jenkins>Global Tool Configuration

找到sonarqube for msbuild配置如下



其中名称可以随便选择,只要方便管理即可.

再找到sonarqube scanner,配置如下



配置完成后点击最下面的save保存

点击完保存之后,我们再进入config system找到sonarqube servers配置如下

serverurl要根据实际情况配置,如果sonarqube和jenkins并不在同一台机器,则需要配置ip地址.

下面我们新建一个自由式任务.名称为mysonar(名称随意)

进入到Build栏目,点击Add Build Steps,我们从来拉列表中选择Sonarqube开始标识(通过前面的章节我们了解到,sonarqube构建包括开始标记,结束标记,然后中间是msbuild构建)

点击后会出现以下配置项,按实际情况配置即可



指定项目名,key(key可以任意起名,只做为惟一标识,并不是ssh登陆类似的key)

然后再新建一个执行bat的步骤.如下图

这里很普通,指定一个要编译的项目,需要注意的是我这里有环境变量msbuild,如果找不到请添加环境变量或者指定msbuild完整路径.

然后再添加一个步骤,这次选择SonarScanner for msbuild -end analysis.

然后点击确定完成创建,我们点击build now触发一次构建.

构建成功后信息如下图



我们点击红色框先的任意一项,就可以跳转到sonarqube web管理界面,如下图示

需要注意的是第一次运行并不能构建成功,这是因为Jenkins需要下载相关插件,插件下载成功后我们进入Jenkins\tools\hudson.plugins.sonar.MsBuildSQRunnerInstallation目录下的你的 SonarScanner for MSBuild的名字,它就是你在Global Tool Configuration>SonarScanner for MSBuild指定的名称,进去以后找到SonarQube.Analysis.xml对它进行配置,关于此文件的配置前面我们讲到过,这里不再赘述.

Sonarqube插件集成单元测试覆盖报告

回忆前面章节,添加sonarqube单元测试覆盖率报告需要额外执行一步运行单元测试的代码,这并不是重点,重点在于如何在Begin Analysis部分指定单元测试执行文件,这里通过指定Additional arguments来实现,如下图示

然后再在msbuild构建完成后添加一步执行单元测试的代码(可以复制前面的代码)就行了,这里需要说明的是前面为了方便讲解我们是在项目目录下执行脚本,使用了%CD%这样的相对路径,Jenkins中建议换成绝对路径,以防出现不必要的麻烦.

完了再进入Sonarqube web管理界面,就可以看到有单元测试覆盖率报告了

Token方式与Sonarqube server交互

上一节我们讲解了通过配置SonarQube.Analysis.xml方式实现与Sonarqube server交互(实际上我们执行构建的时候sonarqube runner是通过http方式把数据提交到sonarqube server),这样做有非常明显的缺点.第一是安全问题,我们知道其实我们是把admin的用户名和密码写入了SonarQube.Analysis.xml文件里,这样很容易暴露管理员账户,在企业生产环境中,如果有恶意的人获取了管理员账户,则可以进行任意构建,然后触发布,这样会造成非常严重的后果,即使被没有恶意的开发者获取到,开发者可能出于好奇心在生产环境中进行测试尝试,这样也可能会造成非常严重的后果.第二是管理很不方便,如果在生产环境的jenkins是分布式的,那么我们进入每一台服务器更改配置文件是很不方便的,如果管理员账户和密码更改了还要进入每台服务器更改,虽然现在有各种自动化的工具使得这种操作不是特别麻烦的问题,但是集中的配置更加方便维护.下面我们讲解如何通过在Jenkins中为Sonarqube server添加token来解决以上两个问题.

在Sonarqube里生成token

首先需要说明的是,只有管理员账户可以生成token,其它账户不可进行此操作.我们进入sonarqube web管理界面,执行以下操作

进入我的账户后security标签,可以看到如下界面

我们在红框内的文本框里输入key的名字,此时Generate按钮变为激活状态,我们点击一下就可以生成一个token

我们点击copy或者直接复制把token存储到文本文档或者其它地方,需要注意的是token必须保存,退出这个页面后token的值就会消失(这里说的消失是指不再显示,而不是真正的消失).

把生成的token添加到Jenkins里

我们再回到jenkins,进入Manage Jenkins>configure system找到SonarQube servers把token粘贴到Server authentication token

需要注意的时,如果已经在SonarQube.Analysis.xml配置了账号密码,则需要删除掉,即删除以下代码

<Property Name="sonar.login">admin</Property>
<Property Name="sonar.password">admin</Property>

.net持续集成sonarqube篇之 sonarqube与jenkins集成(插件模式)的更多相关文章

  1. .net持续集成sonarqube篇之 sonarqube触发webhook

    系列目录 WebHook近些年来变得越来越流行,github,gitlab等代码托管平台都提供webhook功能.关于webhook这里不做详细介绍,大家可以参阅读相关互联网书籍或者材料来更深了解.可 ...

  2. .net持续集成sonarqube篇之sonarqube基本操作(一)

    系列目录 Sonarqube Web管理界面虽然设计的简洁大方,也非常直观,但是由于功能繁多,这对快速入手以及快速定位到想要的功能都是一个挑战,在以后的几个小节里我们简要介绍. OwerView(概览 ...

  3. .net持续集成sonarqube篇之 sonarqube集成单元测试

    系列目录 通过前面章节我们可以看到,不论怎么构建,单元测试覆盖率一栏总是0% 这是因为单元测试覆盖率报告需要额外集成.这一节我们就讲解如何在sonarqube里集成单元测试覆盖率报告. 这里需要借助O ...

  4. .net持续集成sonarqube篇之 sonarqube与jenkins集成(命令模式)

    系列目录 Sonarqube结合Jenkins与常见问题 我们引入sonarqube组件的最终目的是要为整个Ci环境服务的,如果不能集成于当前的Jenkins CI,那么我们做的很多关于sonarqu ...

  5. .net持续集成sonarqube篇之sonarqube安装与基本配置

    系列目录 Sonarqube下载与安装 Sonarqube下载地址是:https://www.sonarqube.org/downloads/下载版本有两个,一个是长期支持版,另一个是最新版,此处安装 ...

  6. .net持续集成sonarqube篇之sonarqube基本操作(二)

    系列目录 Activity界面操作 Activity界面主要是对多次构建管理界面,主要是帮助管理员快速了解项目每次构建与以往构建相比问题是增加了还是减少了等指标.由于目前我们仅进行了一次构建,因此没有 ...

  7. [持续集成学习篇]【1】[jenkins安装与配置]

    Guided Tour This guided tour will use the "standalone" Jenkins distribution which requires ...

  8. 持续集成高级篇之Jenkins Pipeline 集成sonarqube

    系列目录 前面章节中我们讲到了Sonarqube的使用,其实Sonarqube获取msbuild结果主要是执行三个命令,开始标记,执行msbuild,结束标记,这些都是命令,是非常容易集成到我们ci流 ...

  9. SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)

    [前言] 本系列主要讲述sonarqube的安装部署以及如何集成jenkins自动化分析.netcore项目.目录如下: SonarQube系列一.Linux安装与部署 SonarQube系列二.分析 ...

随机推荐

  1. bower工具

    1.安装bower npm install bower -g 2.安装软件 borwer install jquery 3.安装指定版本 borwer install jquery#1.7 4.卸载软 ...

  2. while循环语句、格式化输出、常用运算符、字符编码

    1.while循环 while 空格 条件 冒号 缩进 循环体 num=1 while num<11: print(num) num=num+1 变量都是先执行等号右边的,然后执行等号左边的. ...

  3. CSS3之响应式布局及其应用

    使用 Media 属性前需添加兼容移动设备优先代码 <meta name=”viewport”content=”width=device-width,initial-scale=1.0,maxi ...

  4. c# 开发ActiveX控件,添加事件,QT调用事件

    c# 开发 ActiveX 的过程参考我的另一篇文章 :  https://www.cnblogs.com/baqifanye/p/10414004.html 本篇讲如何 在C# 开发的ActiveX ...

  5. IO侦探:多进程写ceph-fuse单文件性能瓶颈侦查

    近期接到ceph用户报案,说是多进程direct写ceph-fuse的单个文件,性能很低,几乎与单进程direct写文件的性能一样.关乎民生,刻不容缓,笔者立即展开侦查工作~ 一.复现案情,寻踪追记 ...

  6. Redis持久化深入理解

    用过Redis的都知道,Redis有两种持久化方式:RDB和AOF,他们的区别大家应该都清楚,所以今天主要想分享一下这两种持久化方式的底层原理以及实现. 如果让你手写一个持久化(架构级)的功能,你没有 ...

  7. os.path.dirname(__file__)

    os.path.dirname(__file__) 返回脚本的路径 描述: 必须实际存在的.py文件,如果直接在命令行执行,则会引发异常NameError: name 'file' is not de ...

  8. flask模板语言 jinja2 以及render_template 深度用法

    是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...

  9. 谷歌地球 Google Earth v7.3.2.5495 专业版

    谷歌地球(Google Earth,GE)是一款谷歌公司开发的虚拟地球软件,它把卫星照片.航空照相和GIS布置在一个地球的三维模型上.谷歌地球于2005年向全球推出,被<PC 世界杂志>评 ...

  10. mysql 免安装版本 与问题记录

    将文件解压到D盘, 创建 my.ini 配置文件, ------------------复制进去--------------------- [client] port=3306 default-cha ...