下载链接:http://www.sonarqube.org/downloads/
(下载时可能需要翻X软件)
版本选择:如果是用于Java开发,需要集成阿里规范,建议使用6.x.x版本,因为7.x.x版本开始不支持sonar-pmd插件3.0以下的版本,而很多人在集成阿里规范在sonar-pmd插件中时使用的是2.6-2.7版本,因此无法集成进入7.x.x版本中。而如果并非是用于Java代码的质量检查或无需集成阿里规范,则可以视情况使用7.x.x版本。
7.4升级内容:https://www.sonarqube.org/sonarqube-7-4/
下载完成SonarQube压缩包后,将其传输到Linux系统中,使用普通用户解压该压缩包(使用root用户解压,则后续需要对解压出来的文件夹进行授权),进入%SonarHome%/bin/linux-86-64/
目录(假如为Linux64位系统,如果是其他系统则进入bin目录下的对应系统目录)。%SonarHome%
为SonarQube解压后所在的目录。
然后运行./sonar.sh start
命令(不能是以root身份启动),等待一会儿,通过其他电脑浏览器访问http://linux的IP地址:9000
(需要是同一局域网内的电脑),如果出现SonarQube的界面,则是安装成功了。
在同一台服务器中的MySql中创建一个新的空数据库,数据库名随意(为了方便后续描述,这里假定为sonarqube_db),字符集为utf-8,排序规则需要以ci
结尾。
新建完数据库后,进入SonarQube的解压目录,进入%SonarHome%/conf/
目录,输入vi sonar.properties
来修改sonar.properties文件。
在其中找任意一个地方插入以下代码:
sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/sonarqube_db?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.sorceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
sonar.jdbc.url
为连接数据库的url,127.0.0.1
更换为该linux的IP地址,后续一串参数中,useUnicode=true
代表使用Unicode字符串,characterEncoding=utf8
为在前者的基础上指定字符编码为utf8,rewriteBatchedStatements=true
为支持批量插入,可以提升插入的速度,useConfigs=maxPerformance
相当于同时进行了下述设置:cachePrepStmts=true cacheCallableStmts=true cacheServerConfiguration=true useLocalSessionState=true elideSetAutoCommits=true alwaysSendSetIsolation=false enableQueryTimeouts=false
关于useConfig的设置,详情参考:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html 中的
The useConfigs Option and the Configuration Property Files
。
sonar.jdbc.username
为连接数据库的用户名。
sonar.jdbc.password
为连接数据库的用户名。
sonar.sorceEncoding
为sonar服务器本身的编码方式
sonar.login
为SonarQube服务器管理员的登录名
sonar.password
为SonarQube服务器管理员的密码
设置完了上述配置后,重启SonarQube服务,运行下述命令:%SonarHome%/bin/linux-86-64/bin/sonar.sh restart
。
等待重启完毕后,重新访问http://linux的IP地址:9000
,这次访问会有的慢,因为需要初始化数据库信息。
初始化成功后,SonarQube服务器的默认语言为英文,如果需要汉化包的话,可以进入它提供的应用市场中下载。
操作步骤如下:
登录
进入
http://linux的IP地址:9000/admin/marketplace
找到Chinese Pack,点击install
安装成功后,重启SonarQube服务,再次访问
http://linux的IP地址:9000
,即可看到中文界面注:可能存在安装成功中文包后界面还是英文的情况,这种情况与浏览器的语言设置有关。浏览器的默认语言并不一定与界面语言一致,例如Chrome的默认语言为其设置页面中,高级 -> 语言 下排名最上面的语言,但还可以额外设置Chrome的界面语言。因此如果出现了已经安装了中文包但界面还是英文的情况,可以去浏览器的设置页面,确认一下语言的设置情况。
我使用的方式是写入在/etc/rc.d/rc.local
文件中添加这一句语句su -c "/home/sonarqube/sonarqube-6.7.5/bin/linux-x86-64/sonar.sh start" sonarqube
。
最后的sonarqube是新增加的普通用户的用户名(因为无法通过root用户启动sonarqube)。
但只添加这么一句话后,还无法做到开机自启,问题有两点:
先说问题1,是由于权限问题导致的,其实仔细阅读rc.local文件,会注意到里面提到了这样一段
Please note that you must run ‘chmod +x /etc/rc.d/rc.local’ to ensure
that this script will be executed during boot.
因此,去执行chmod +x /etc/rc.d/rc.local
即可。
问题2是由于sonarqube运行Java默认情况下是通过java
命令执行的,因此依赖于环境变量中是否存在java
指令。而如果放进开机运行中,则环境变量还没初始化起来时就执行了,因此就会调用JVM失败。
所以对sonarqube的Java配置进行变更,使其直接调用相应文件位置即可。
修改%SonarHome%/conf/wrapper.conf
,将其中的wrapper.java.command=java
更改为wrapper.java.command=%JAVA_HOME%/bin/java
,其中JAVA_HOME
为jdk路径。
如我的jdk路径为/usr/src/jdk1.8.0_141
,就更改为wrapper.java.command=/usr/src/jdk1.8.0_141/bin/java
即可。
如果Jenkins未安装SonarQube Scanner for Jenkins
的话,需要先在Jenkins->系统管理->管理插件->可选插件
中,搜索SonarQube Scanner for Jenkins
,然后安装,等待安装完成后重启。
安装完成后,需要进行的步骤如下:
系统设置->系统设置
中,先添加一个SonarQube Server指定到我们的服务器。Enable injection of SonarQube server configuration as build environment variables
。http://linux的IP地址:9000
,Server authentication token为SonarQube服务器中生成的一个token。(位于http://linux的IP地址:9000/account/security/
中,在生成新令牌
款内输入任意一个名称,点击生成,即可获取一个token,该token生成之后无法再次通过SonarQube获得,请务必保存在一个安全的地方)。配置完了SonarQube后,需要去下载相应的扫描器放入Linux中,Jenkins才能配合该扫描器进行分析生成相应报告。
SonarQube Scanner 下载链接:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
根据平台下载对应版本即可
下载完成后,传输进Linux中,解压缩,记住文件路径,然后返回Jenkins配置中来。
进入系统管理->全局工具配置->SonarQube Scanner
,点击SonarQube Scanner 安装
,然后选择新增SonarQube Scanner
,取消自动安装,在Name栏中随意填一个名称,如:”sonar-scanner“,然后在SONAR_RUNNER_HOME
一栏中填写刚才SonarQube Scanner解压到的目录,如:/home/sonarqube/sonar-scanner-3.2.0.1227-linux
。
至此,基础准备已经完成了,接着就是在项目中进行配置。
选择项目,进入相应配置,在Post Steps
或构建
中,点击Add post-build step
或增加构建步骤
,从中找到Execute SonaQube Scanner
项,单击。
在新增的选项框中,Task to run
栏内填入scan
,JDK选择相应JDK,然后在Analysis properties
中填入以下信息:
sonar.projectKey=trunk
sonar.projectName=project-trunk
sonar.projectVersion=${SVN_REVISION}
sonar.sources=src
sonar.java.binaries=target/wisonic-1.0.0/WEB-INF/classes
其中:
sonar.projectKey为SonarQube分析项目的关键字,SonarQube根据这个去分辨不同的项目
sonar.projectName为SonarQube分析项目的名称,在SonarQube中展现出来的每个项目的名字就是这个,这个同样并不代表就会是一个项目,因此为了避免混淆,不是一个项目不要使用一样的名称
sonar.projectVersion为SonarQube中的版本,这里我直接使用了SVN的版本
sonar.sources为项目内的源码目录
sonar.java.binaries为编译完成的字节码文件所在的目录
至此,SonarQube与Jenkins整合就完毕了,点击编译,就会在编译完成后自动进行SonarQube的分析和上传相应报告啦。
点击菜单栏中的File
,然后选择Settings
,选择Plugins
,点击Browse repositories
,搜索SonarLint
,点击install
,即可将IDEA中的插件下载下来。
下载安装完毕后,重启IDEA,进入Settings
,选择Other Settings
,在下拉列表中选择SonarLint General Settings
,在右侧可以配置SonarQube的服务器了。
点击+
号,在Configuration Name
栏中随意输入一个名称,如:Jenkins Server SonarQube
,然后选择右侧的sonarQube
,在下面填入相应的URLhttp://linux的IP地址:9000
。
点击Next
,选择用户密码登录或Token登录都可以,输入自己的用户名密码,或者是自己生成的相应token。然后点击Next
,配置成功的话会出现SonarQube Server connection successfully edited.
这么一句话,点击Finish
按钮,SonarQube服务就关联起来了。
但是这里还没结束,接下来还需要与项目建立关联。
还是一样的File
->Settings
->Other Settings
->SonarLint Project Settings
,勾选Enable binding to remote SonarQube server
,在Bind to server
中选择刚刚建立关联的服务器,然后在SonarQube project
栏的右侧点击Seach in list
,选择该项目对应的SonarQube服务器上的项目,点击下方的OK
即可。