jjzjj

Sonarqube 安装 及与Jenkins sonar scanner插件集成部署

IT_狂奔者 2025-01-03 原文

一、 SonarQube基本概述

1.什么是SonarQube

SonarQube是一个开源的代码质量管理系统,用于检测代码中的错误,漏洞和代码规范。它可以现有的Gitlab、Jenkins集成,以便在项目拉取后进行连续的代码检查。

2.使用SonarQube前提

  • SonarQube基于Java开发,所以需要安装 OpenJDK8 版本。
  • SonarQube需要依赖 MySQL 数据库,至少 5.6 版本以上8版本以下。
  • SonarQube的小型实例至少需要4GB 内存,如果是大型实例需要 16GB

二、SonarQube服务安装

分两个步骤,第一步安装sonarqube server端,第二步,jenkins集成sonarqube-scanner(需要连接sonar服务端)

这里SonarQube使用的是7.4版本,mysql版本 mysql>=5.6 && mysql <8.0

1.安装数据库

数据库安装

启动数据库,为sonarqube创建一个专有用户,最后创建一个sonar

create database sonar default character set utf8;
GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'xxx' IDENTIFIED BY 'xxx' WITH GRANT OPTION;

2.安装sonarqube

2.1 官网下载 sonarqube

注意:新版的SonarQube(7.9+)只支持以下数据库:
Microsoft SQL Server、Oracle、PostgreSQL、H2 (默认的嵌入式数据库)
不再支持MySQL,请更换数据库。

这里下载的是7.4版本

#解压
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.4.zip
unzip sonarqube-7.4.zip -d /usr/local/

因为sonarqube不能以root启动,此处需要创建一个普通用户,此处我创建的为sonar

useradd sonar

2.2 更改下sonarqube目录所有权

ln -s /usr/local/sonarqube-7.4 /usr/local/sonarqube
chown -R sonar:sonar /usr/local/sonarqube
chown -R sonar:sonar /usr/local/sonarqube-7.4/

2.3 修改sonarqube连接数据库配置文件

sonar.jdbc.url=jdbc:mysql://xxx:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=sonar
sonar.jdbc.password=xxx
sonar.sorceEncoding=UTF-8
sonar.login=admin
sonar.password=admin

2.4 启动sonarqube服务

su sonar  -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"

2.5 汉化包地址

汉化地址
汉化包版本选择对应版本,此处1.24版本汉化包对应7.4版本sonarqube
把汉化包放在解压地址下/usr/local/sonarqube/extensions/plugins

2.6 访问Sonarqube

1.通过浏览器输入 http://xxx:9000地址来访问sonarqube

点击登录–>输入用户名:admin 用户密码:admin


2.如何使用 SonarQube 质量分析;java 代码直接通过mvn即可分析

mvn sonar:sonar \
  -Dsonar.host.url=http://xxx:9000 \
  -Dsonar.login=xxx

3.如何使用SonarQube质量分析;非 java 代码则需要使用 sonar-scanner工具分析;

sonar-scanner \
  -Dsonar.projectKey=html \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://xxx:9000 \
  -Dsonar.login=xxxx

3.Sonarqube插件管理

Sonarqube默认已经安装了 C Java Python Php 等代码的质量分析工具;那我们为什么还需要安装插件?因为我们还需要检测 html等类型代码,而默认插件没有,所以需要安装;以便将代码检测的更加完善;

3.1 联网安装插件

联网安装插件比较简单,仅需要上应用市场搜索插件名称即可,如下以安装中文语言包插件为例;点击配置> 应用市场--> 搜索框chinese,出现一个Chinese Pack,然后点击install安装好的插件会存储至/usr/local/sonarqube/extensions/plugins/xx.jar

3.2 离线安装插件

由于 SonarQube 需要安装很多的插件,并且插件安装需要很长的时间;所以我们可以通过导入的方式来完成插件的安装;注意导入后需要重启 Sonarqube

rm -rf /usr/local/sonarqube/extensions/plugins/
tar xf sonar_plugins.tar.gz -C /usr/local/sonarqube/extensions
 chown -R sonar.sonar /usr/local/sonarqube/extensions/plugins/
su sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart"

三、SonarQube代码检测

前面已经将 SonarQube服务以及插件安装完成,那么接下来只需要将代码推送至 Sonarqube 进行分析即可。

1.Java项目分析

1.1 Java项目可以通过maven进行代码质检,无需使用sonar-scanner 工具,安装maven工具即可。

yum -y install maven 

1.2 手动从svn仓库获取java 代码,进入项目目录,使用mvn进行代码扫描

mvn sonar:sonar \
  -Dsonar.host.url=http://xxx:9000 \
  -Dsonar.login=xxx

2 HTML项目分析

Sonarqube 分析 Html、php、go 项目;需要借助sonar-scanner客户端工具来完成代码的分析;
需要在项目所在的主机安装sonar-scanner

2.1 安装 sonar-scanner 命令

sonar-scanner下载地址

2.2 用sonar-scanner进行分析

进入项目目录,使用sonar-scanner工具将代码推送Sonarqube 服务端进行分析;如果没有加入环境变量,则建议使用绝对路径

/usr/local/sonar-scanner/bin/sonar-scanner \
  -Dsonar.projectKey=html \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://xxx:9000 \
  -Dsonar.login=xxx

2.3 登陆 Sonarqube 查看项目分析结果

四、Jenkins集成SonarQube

Jenkins 需要知道 Sonarqube 服务;以便能将代码推送指定服务节点;
Jenkins 需要知道 Sonar-Scanner 客户端工具,以便能正常调用

4.1 集成Sonarqube

1.插件安装;Manage Jenkins–>Manage Plugins–>SonarQube Scanner

2.在 Jenkins 上配置 SonarQube 服务端地址;Manage Jenkins–>Configure System–>sonarQube (告诉jenkins SonarQubeServers服务端地址)
Name 可以随意填写
URL 添加 SonarQube服务端地址;确保Jenkins能正常访问;
下面的凭据需要先保存URl的地址信息,在打开进行添加凭据。

这里Secret为Sonarqube生成的令牌

进行添加token

以上SonarQube信息就添加完成了

4.2 集成Sonar-Scanner

在 Jenkins 上配置 Sonar-Scanner 客户端工具路径; Manage Jenkins–>Global Tool Configuration–>sonar-scanner(告诉jenkins SonarScanner在本地哪个路径)
1.Name 可以随意填写,但最好有规范
2.SONAR_RUNNER_HOME 填写 sonar-scanner 在Jenkins本地路径

4.3 Jenkins为项目添加代码检测

java项目 Scanner质检方式,把执行代码质检拉倒执行shell的前面

sonar.projectName=${JOB_NAME} #项目在sonarqube上的显示名称
sonar.projectKey=java ##项目的唯一标识,不能重复
sonar.scm.provider=svn
sonar.projectVersion=1.0
sonar.projectBaseDir=xxx #项目所在的目录(使用绝对路径)
sonar.sources=xxx  #扫描哪个项目的源码(使用绝对路径)
sonar.java.binaries=xxx


这样配置后,每次项目CI时候,先会进行质量检测,并将结果传送至SonarQube服务器。

五、Jenkins为项目添加通知阶段

5.1 配置钉钉

1.打开钉钉群组,点击设置–智能群助手–群机器人–添加机人–自定义机器人。(如果你不是群主,且群主开启了仅群主可管理,那么将无法创建机器人。)
2.添加一个自定义机器人
3.可以修改机器人名称,以及机器人的名字。(这块自行修改)
4.机器人修改成功后,会给出一个webhook地址。(此处的webhook后续jenkins需要使用)

5.2 Jenkins集成钉钉

1.Jenkins安装dingding插件。

配置dingding通知token

2.配置钉钉机器人

5.3 项目添加通知

5.3.1 CI阶段通知质检结果

质检通知相对繁琐,需要自定义环境变量
1.启用钉钉机器人

- 构建的项目:${JOB_NAME}
- Sonar质检报告:http://xxx

5.3.2 钉钉通知结果验证

有关Sonarqube 安装 及与Jenkins sonar scanner插件集成部署的更多相关文章

  1. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  2. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  3. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  4. ruby - 完全离线安装RVM - 2

    我打算为ruby​​脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn

  5. ruby-on-rails - rails 目前在重启后没有安装 - 2

    我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

  6. ruby - 如何为 emacs 安装 ruby​​-mode - 2

    我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby​​提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs

  7. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  8. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  9. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  10. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

随机推荐