Jenkins与sonar集成

部门领导要求扫描代码质量,我们平时是用jenkins来做持续集成和持续发布的,所以就将jenkins和sonar做了集成,在编译完成后sonar自动扫描代码,然后在进行发布。

sonar简介

SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 通过SonarQube我们可以检测出项目中重复代码,潜在bug,代码风格问题,缺乏单元测试等问题, 并通过一个web ui展示出来。
这里摆一张从网上搜到的图:

安装配置sonar

新建普通用户sonar

1

2

3
# useradd sonar

# passwd sonar

输入两次密码

下载sonar

下载地址:https://www.sonarqube.org/downloads/
我这里下载的是长期支持版6.7.7。

1

2

3
# su - sonar

# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.7.zip

# unzip -oq sonarqube-6.7.7.zip

MySQL中新建sonar数据库

1

2

3

4
# mysql -uroot -p

mysql> create database sonar default charset utf8;

mysql> grant all on sonar.* to [email protected] identified by 'sonar';
mysql> grant all on sonar.* to [email protected]'%.%.%.%' identified by 'sonar';

mysql> flush privileges;

修改sonar.properties文件

1

2

3

4
[[email protected] ~]$ cd sonarqube-6.7.7/

[[email protected] sonarqube-6.7.7]$ ls

bin  conf  COPYING  data  elasticsearch  extensions  lib  logs  temp  web

[[email protected] sonarqube-6.7.7]$ vim conf/sonar.properties

启动/停止sonar

1

2
[[email protected] sonarqube-6.7.7]$ bin/linux-x86-64/sonar.sh start

[[email protected] sonarqube-6.7.7]$ bin/linux-x86-64/sonar.sh stop

访问sonar web:http://172.16.7.180:9000
默认账号密码是:admin/admin。登录完成后,建议去修改管理员密码。点击右上角的管理员头像,选择“我的账号”,然后点击“安全”,可以看到修改密码的地方。

sonar配置邮件

使用管理员账号登录sonar web,点击第一行菜单中的“配置”。往下拉,在左侧最下方点击“通用”。在右侧,往下拉会看到可以配置邮件的地方。

sonar添加用户、组

1.添加组
可以针对一个项目添加一个组,把这些人放到这个组里面,然后再配置相应的权限。
使用管理员账号登录sonar web,点击第一行的“配置”,点击“权限”,在下拉菜单中选择“群组”。

然后点击右上方“创建群组”,输入群组名称即可创建群组。此时还没有添加用户,没有用户可以添加到新创建的群组中。

2.添加用户
使用管理员账号登录sonar web,点击第一行的“配置”,点击“权限”,在下拉菜单中选择“用户”。然后点击右上方的“创建用户”。

jenkins安装sonarqube scaner插件

浏览器输入jenkins访问地址,以管理员账户登录后,点击左侧菜单的“系统管理”。然后找到“管理插件”,点击“可选插件”,输入sonarqube scanner,即可搜索到。我这边由于jenkins版本比较低,是2.73.3。最新的sonarqube scanner插件需要jenkins 2.89.4以上版本才可以安装,但是这里又不提供低版本的插件直接安装。查看sonarqube官方文档,有jenkins版本和sonarscanner版本对应关系。

这样就只能先下载好低版本的插件,然后通过“高级”选项卡上传插件进行安装。
我这里下载好了2.6.1版本的sonar.hpi。在插件管理里,选择“高级”选项卡。

往下拉,找到“上传插件”,点击“选择文件”,然后选择本地的sonar.hpi,点击“上传”。过一会儿就装好了。

jenkins构建过程配置sonar

1.配置“SonarQube servers”
在jenkins页面,点击“系统管理”,点击“系统设置”,找到“SonarQube servers”,点击“Add SonarQube”,输入SonarQube的相关信息。

上图中的token,请访问sonar界面,使用管理员账号登录,点击右上角的管理员头像,选择“我的账号”,然后点击“安全”,第一项就是“令牌”。在输入框输入名字,随便定义,然后点击“生成”。

【注意】:请复制生成的token并保存下来,因为后来在进去就看不到了。

2.配置在构建过程中增加sonar扫描
点击某个项目进去,在“构建”处,点击“增加构建步骤”,选择“Execute SonarQube Scanner”,配置如下:

上图中在 Analysis properties 项里配置了一个参数,sonar.projectBaseDir=/root/.jenkins/workspace/gemini_dev。之所以配置这个参数,是因为我这个项目里配置有多个svn地址,每个svn地址都是项目的一个模块,这个情况下SonarQube的sonar.ProjectBaseDir参数默认会被设置为第一个项目的路径。这会导致找不到其他模块。详见官方issue:https://issues.jenkins-ci.org/browse/JENKINS-24044

上图中的 sonar-project.properties 内容大致如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

大专栏  Jenkins与sonar集成 class="line">51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103
#sonarqube的地址

sonar.host.url=http://172.16.7.180:9000

# SonarQube 中唯一表示,must be unique in a given SonarQube instance

sonar.projectKey=gemini #名字随意

# ui里面显示的项目名称,this is the name displayed in the SonarQube UI

sonar.projectName=gemini #名字随意

#版本号

sonar.projectVersion=1.0  #版本随意

#用户名密码,用token代替

sonar.login=26e7ce1f5cc56a2442b7934b721749bd269f2dcc

#语言

#sonar.language=java,html,css,js #默认是多语言,但是不支持这么写

#源码位置

sonar.modules=eetablecore,eetablemanage,emapflow,emapfunauth,emapsender,emaptaskcenter,emapturing,flowstatistics,skylobby,temppersonnel,getemapapplist,getybtapplist,emapposition,resourcemonitor,serviceanalyseapp

eetablecore.projectBaseDir=/root/.jenkins/workspace/gemini_dev/eetablecore

eetablecore.sonar.projectName=eetablecore

eetablecore.sonar.sources=src,web

eetablecore.sonar.java.binaries=/usr/local/gemini/eetablecore/classes

eetablecore.sonar.exclusions=web/**/*.css,web/**/*.less,web/**/*.scss,web/**/*.min.js

eetablemanage.projectBaseDir=/root/.jenkins/workspace/gemini_dev/eetablemanage

eetablemanage.sonar.projectName=eetablemanage

eetablemanage.sonar.sources=src,web

eetablemanage.sonar.java.binaries=/usr/local/gemini/eetablemanage/classes

eetablemanage.sonar.exclusions=web/**/*.css,web/**/*.less,web/**/*.scss,web/**/*.min.js,web/public/design/plugin/**/*,web/public/design/public/**/*

emapflow.projectBaseDir=/root/.jenkins/workspace/gemini_dev/emapflow

emapflow.sonar.projectName=emapflow

emapflow.sonar.sources=src,web

emapflow.sonar.java.binaries=/usr/local/gemini/emapflow/classes

emapflow.sonar.exclusions=web/**/*.css,web/**/*.less,web/**/*.scss,web/**/*.min.js,src/org/activiti/**/*.java

emapfunauth.projectBaseDir=/root/.jenkins/workspace/gemini_dev/emapfunauth

emapfunauth.sonar.projectName=emapfunauth

emapfunauth.sonar.sources=src,web

emapfunauth.sonar.java.binaries=/usr/local/gemini/emapfunauth/classes

emapfunauth.sonar.exclusions=web/**/*.css,web/**/*.less,web/**/*.scss,web/**/*.min.js

emapsender.projectBaseDir=/root/.jenkins/workspace/gemini_dev/emapsender

emapsender.sonar.projectName=emapsender

emapsender.sonar.sources=src

emapsender.sonar.java.binaries=/usr/local/gemini/emapsender/classes

emaptaskcenter.projectBaseDir=/root/.jenkins/workspace/gemini_dev/emaptaskcenter

emaptaskcenter.sonar.projectName=emaptaskcenter

emaptaskcenter.sonar.sources=src,web

emaptaskcenter.sonar.java.binaries=/usr/local/gemini/emaptaskcenter/classes

emaptaskcenter.sonar.exclusions=web/**/*.css,web/**/*.less,web/**/*.scss,web/**/*.min.js

emapturing.projectBaseDir=/root/.jenkins/workspace/gemini_dev/emapturing

emapturing.sonar.projectName=emapturing

emapturing.sonar.sources=src,web

emapturing.sonar.java.binaries=/usr/local/gemini/emapturing/classes

emapturing.sonar.exclusions=web/**/*.css,web/**/*.less,web/**/*.scss,web/**/*.min.js

flowstatistics.projectBaseDir=/root/.jenkins/workspace/gemini_dev/flowstatistics

flowstatistics.sonar.projectName=flowstatistics

flowstatistics.sonar.sources=src,web

flowstatistics.sonar.java.binaries=/usr/local/gemini/flowstatistics/classes

flowstatistics.sonar.exclusions=web/**/*.css,web/**/*.less,web/**/*.scss,web/**/*.min.js

skylobby.projectBaseDir=/root/.jenkins/workspace/gemini_dev/skylobby

skylobby.sonar.projectName=skylobby

skylobby.sonar.sources=src,web

skylobby.sonar.java.binaries=/usr/local/gemini/skylobby/classes

skylobby.sonar.exclusions=web/**/*.css,web/**/*.less,web/**/*.scss,web/**/*.min.js,web/manager/components/UE/**/*,web/mobile/dependencies/**/*,web/mobile/static/**/*

temppersonnel.projectBaseDir=/root/.jenkins/workspace/gemini_dev/temppersonnel

temppersonnel.sonar.projectName=temppersonnel

temppersonnel.sonar.sources=src,web

temppersonnel.sonar.java.binaries=/usr/local/gemini/temppersonnel/classes

temppersonnel.sonar.exclusions=web/**/*.css,web/**/*.less,web/**/*.scss,web/**/*.min.js

getemapapplist.projectBaseDir=/root/.jenkins/workspace/gemini_dev/getemapapplist

getemapapplist.sonar.projectName=getemapapplist

getemapapplist.sonar.sources=src

getemapapplist.sonar.java.binaries=/usr/local/gemini/getemapapplist/classes

getybtapplist.projectBaseDir=/root/.jenkins/workspace/gemini_dev/getybtapplist

getybtapplist.sonar.projectName=getybtapplist

getybtapplist.sonar.sources=src

getybtapplist.sonar.java.binaries=/usr/local/gemini/getybtapplist/classes

emapposition.projectBaseDir=/root/.jenkins/workspace/gemini_dev/emapposition

emapposition.sonar.projectName=emapposition

emapposition.sonar.sources=src,web

emapposition.sonar.java.binaries=/usr/local/gemini/emapposition/classes

emapposition.sonar.exclusions=web/**/*.css,web/**/*.less,web/**/*.scss,web/**/*.min.js

resourcemonitor.projectBaseDir=/root/.jenkins/workspace/gemini_dev/resourcemonitor

resourcemonitor.sonar.projectName=resourcemonitor

resourcemonitor.sonar.sources=src,web

resourcemonitor.sonar.java.binaries=/usr/local/gemini/resourcemonitor/classes

resourcemonitor.sonar.exclusions=web/**/*.css,web/**/*.less,web/**/*.scss,web/**/*.min.js

serviceanalyseapp.projectBaseDir=/root/.jenkins/workspace/gemini_dev/serviceanalyseapp

serviceanalyseapp.sonar.projectName=serviceanalyseapp

serviceanalyseapp.sonar.sources=src

serviceanalyseapp.sonar.java.binaries=/usr/local/gemini/serviceanalyseapp/classes

#源码的编码

sonar.sourceEncoding=UTF-8

【说明】:
1.以上配置中 src 为java源代码目录,web为前端js目录。
2.新版本的SonarQube scanner的配置文件里扫描java源代码需要提供 java.binaries 定义,我这里对应每个模块建了个文件夹作为值。
3.配置文件可配参数更详细的介绍:
https://baiyangcao.github.io/notes/2017/01/11/sonarqube-analyz-parameter.html
https://docs.sonarqube.org/latest/analysis/analysis-parameters/
https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/

构建测试并查看结果

在jenkins相应项目上,点击“立即构建”,然后查看“Console Output”:

构建完成后可以登录sonar web界面查看:


原文地址:https://www.cnblogs.com/liuzhongrong/p/12251239.html

时间: 2024-08-01 11:22:13

Jenkins与sonar集成的相关文章

Jenkins和Sonar集成

Jenkins可以通过插件的形式和Sonar很好的集成. (1)Jenkin安装Sonar插件(这里我估计安装的插件有点多) 注意:之前安装Jenkins的时候我用的是JDK系统环境环境变量jdk1.7,在安装sonar插件的时候会出现JDK版本过低的信息.所以我们还需要设置Jenkins所在Tomcat的JDK为1.8,修改方法见 Linux中设置Tomcat的版本 (2)配置SonarQube 在系统管理>系统设置中设置SonarQube Service 注:虽然我安装的是sonar5.3,

持续集成与自动化部署 - jenkins与sonar、gitlab集成 (六)

1 将jenkins和sonar集成 1.1 安装sonar 插件 jenkins上安装sonarqube plugin ,如果没有就安装sonarqube scanner for jenkins这个插件. 1.2 关联sonar 插件 1.2.1 系统设置 设置sonar地址 系统管理 > 系统设置 > Add SonarQube > sonarqube servers 修改如下: 1.2.2 全局设置 设置sonar扫描器位置 系统管理 > Global Tool Config

Jenkins + Github持续集成构建Docker容器,维基百科&人工自能(AI)模块

本文分两部分,第一部分是手动计划任务的方式构建Github上的Docker程序,第二部分是用Github webhook Trigger一个自动构建任务. Jenkins采用2.5版本Docker采用1.7.1代码托管使用的Github官网系统为IBM Bluemix提供的Cent6.7,服务器地址在美国南加州 1.1 创建一个Freestyle Project, let's say jenkins-docker 1.2 Set workplace to /var/lib/jenkins/job

持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成]

持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成] 标签(空格分隔): Jenkins 一.代码流水线管理 Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目.如果使用jenkins构建完成后,开发构建项目需要一项一项点击,比较麻烦.所以出现pipeline名词. 代码质量检查完毕之后,我们需要将代码部署到测试环境上去,进行自动化测试 新建部署代码项目 点击新建 这里只需要写一下描述 执行Shell脚本 温馨提示:执行命令主要涉及的是权限问题,我们要搞明

jenkins+github持续集成中的坑

1.前言 刚开始开发自己的独立博客的时候,每次发布都要手动打包,上传服务器,杀tomcat进程,重启,来回这么重复性工作,很快就有点不耐烦了.如果能自动化的东西,就绝不要手动了,所以自己搭建了个持续集成环境,配好了结合github进行push时自动构建,自动发布的流程,提交代码,泡杯咖啡就发布好了.本以为很简单,但没想到中间细节还是有不少坑,查了很多资料,墙都翻了好几次,把遇到的问题记录在这里. 2.正文 详细安装教程就不复制粘贴了,推荐此文手把手教你搭建Jenkins+Github持续集成环境

使用jenkins构建持续集成平台

jenkins +   Maven + svn/git + tomcat 的持续集成平台 项目管理流程: 需求分析----原型设计----开发代码----提交测试-----内部测试-----确认上线(确认上线前可能经过多种环境的测试) ------上线到生产环境-----最终测试------如果出现问题代码回滚. 传统代码上线: 开发人员开发完成-----打好包(war.jar)-----交给运维人员上线(上传.拷贝) jenkins持续集成简介: 持续集成是一种软件开发实践,对于提高软件开发效

jenkins gulp 持续集成环境搭建

本文假设你之前没有用过任何任务脚本(task runner)和命令行工具,一步步教你上手Gulp.然后教你jenkins如何集成前端构建工具Gulp.不要怕,jenkins gulp 持续集成环境搭建其实也很简单,我会分为五步向你介绍jenkins gulp 持续集成并帮助你完成一些惊人的事情.那就直接开始吧. 第一步:安装Node 首先,最基本也最重要的是,我们需要搭建node环境.访问 https://nodejs.org/en/download/ 下载得到这样的一个文件node-v6.9.

【iOS】Jenkins Gitlab持续集成打包平台搭建

Jenkins Gitlab持续集成打包平台搭建 SkySeraph July. 18th 2016 Email:[email protected] 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com 1. 相关概念 Jenkins Jenkins,一个用Java编写的开源的持续集成工具,提供了软件开发的持续集成服务,可监控并触发持续重复的工作,具有开源,支持多平台和插件扩展,安装简单,界面化管理等特点.更多介绍参考维基介绍. Gitlab GitLab是一个利用R

用MSBuild和Jenkins搭建持续集成环境(2)

http://www.infoq.com/cn/articles/MSBuild-2 作者 Mustafa Saeed Haji Ali ,译者 李剑 发布于 2012年10月23日 | 注意: 挥一挥衣袖,带走满满干货,关注活动大本营,时不时发福利呦!3 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件分享 稍后阅读 我的阅读清单 这是持续集成系列的下半部分,如果你还没看过上半部分的话,请点击这里:用MSBuild和Jenkins搭建持续集成环境(1). 与Jenkins相会