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

一:Sonar是什么?
Sonar 是一个用于代码质量管理的开放平台,通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如FindBugs,PMD等)直接显示在Web页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时Sonar还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar,此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

#官方网站:http://www.sonarqube.org/

Sonar部署
Sonar的相关下载和文档可以在下面的链接中找到:http://www.sonarqube.org/downloads/。需要注意最新版的Sonar需要至少JDK 1.8及以上版本

cd /usr/local/src
cd /usr/local/src/
wget https://sonarsource.bintray.com/Distribution/sonarqube//sonarqube-5.6.6.zip
unzip sonarqube-5.6..zip
mv sonarqube-5.6. /usr/local/
ln -s /usr/local/sonarqube-5.6./ /usr/local/sonarqube

准备Sonar数据库(mysql版本要等于5.6或者5.6以上,否则sonar无法启动)

mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar@341Jpw';
mysql> FLUSH PRIVILEGES;

配置Sonar

# cd /usr/local/sonarqube/conf/

修改配置文件的数据库配置

# egrep '^[a-Z]' sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar@pw
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

启动Sonar
你可以在Sonar的配置文件来配置Sonar Web监听的IP地址和端口,默认是9000端口。

# vim sonar.properties
sonar.web.host=0.0.0.0
sonar.web.port=

# 启动有创建表和其他操作,速度会有点慢

[root@node1 conf]# /usr/local/sonarqube/bin/linux-x86-/sonar.sh start
Starting SonarQube...
Started SonarQube. 报错:
org.sonar.api.utils.MessageException: Unsupported mysql version: 5.5. Minimal supported version is 5.6.
2017.07. :: ERROR web[o.a.c.c.StandardContext] One or more listeners failed to start. Full details will be found in the appropriate container log file
2017.07. :: INFO web[o.a.c.u.SessionIdGeneratorBase] Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [,] milliseconds.
2017.07. :: ERROR web[o.a.c.c.StandardContext] Context [] startup failed due to previous errors
2017.07. :: WARN web[o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
java.lang.Object.wait(Native Method)
java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:)
com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:)
2017.07. :: WARN web[o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [Timer-] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
java.lang.Object.wait(Native Method)
java.util.TimerThread.mainLoop(Timer.java:)
java.util.TimerThread.run(Timer.java:)
2017.07. :: INFO web[o.a.c.h.Http11NioProtocol] Starting ProtocolHandler ["http-nio-0.0.0.0-9000"]
2017.07. :: INFO web[o.s.s.a.TomcatAccessLog] Web server is started
2017.07. :: INFO web[o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port
2017.07. :: WARN web[o.s.p.ProcessEntryPoint] Fail to start web
java.lang.IllegalStateException: Webapp did not start
at org.sonar.server.app.EmbeddedTomcat.isUp(EmbeddedTomcat.java:) ~[sonar-server-5.6..jar:na]
at org.sonar.server.app.WebServer.isUp(WebServer.java:) [sonar-server-5.6..jar:na]
at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:) ~[sonar-process-5.6..jar:na]
at org.sonar.server.app.WebServer.main(WebServer.java:) [sonar-server-5.6..jar:na]
2017.07. :: INFO web[o.a.c.h.Http11NioProtocol] Pausing ProtocolHandler ["http-nio-0.0.0.0-9000"]
2017.07. :: INFO web[o.a.c.h.Http11NioProtocol] Stopping ProtocolHandler ["http-nio-0.0.0.0-9000"]
2017.07. :: INFO web[o.a.c.h.Http11NioProtocol] Destroying ProtocolHandler ["http-nio-0.0.0.0-9000"]

解决办法:
升级mysql版本到5.6或者5.6以上

登陆:http://192.168.3.199:9000/

账号密码默认都是admin

#到此sonar就安装完成了,下一步将进入配置使用阶段。

二:配置并使用sonar
2.1:安装插件部分:
2.1.1:默认的插件目录:

# ll /usr/local/sonarqube-5.6./extensions/plugins/

#如果在线安装插件不成功,可以把插件下载后放在此目录在重启sonar服务也可以实现安装插件,jenkins也可以通过此方式安装,另外jenkins还支持上传插件

2.1.2:安装插件:
administration-system-update center-available,在后面的搜索框搜索插件名称,然后点install安装:


或在插件目录/usr/local/sonarqube/extensions/plugins执行

wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.11/sonar-l10n-zh-plugin-1.11.jar(中文插件:)然后重启服务:

# /usr/local/sonarqube/bin/linux-x86-/sonar.sh restart

Sonar插件安装包下载地址:
https://sonarsource.bintray.com/Distribution/

主要的是sonar对代码的分析是通过插件完成的,即分析java代码要安装java插件,分析php代码要安装php插件,分析什么语言就安装什么语言的插件
本次我们安装了php、python、java语法检测插件

root@node1 plugins]# pwd

/usr/local/sonarqube/extensions/plugins
[root@node1 plugins]# ll
total
-rw-r--r-- root root Feb : README.txt
-rw-r--r-- root root Jul : sonar-java-plugin-4.11.0.10660.jar
-rw-r--r-- root root Jul : sonar-php-plugin-2.10.0.2087.jar
-rw-r--r-- root root Jul : sonar-python-plugin-1.8.0.1496.jar

2.1.3:代码检测测试,把sonar-scanner和sonarqube关联起来

sonar-scanner下载地址:https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/

cd /usr/local/src
wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
unzip sonar-scanner-2.6..zip
mv sonar-scanner-2.6. /usr/local/
cd /usr/local/
ln -s sonar-scanner-2.6. sonar-scanner

配置sonar-scanner:

[root@node1 conf]# vim /usr/local/sonar-scanner/conf/sonar-scanner.properties
sonar.host.url=http://localhost:9000
sonar.sourceEncoding=UTF-
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar@341Jpw
sonar.jdbc.url=jdbc:mysql://192.168.3.12:3306/sonar?useUnicode=true&characterEncoding=utf8

检测PHP项目,需要在sonar中先安装SonarPHP插件,github搜索php-sonar-runner项目,对这个项目进行检测
https://github.com/hasanyousuf/php-sonar-runner-unit-tests

unzip php-sonar-runner-unit-tests-master.zip
cd php-sonar-runner-unit-tests-master [root@node1 php-sonar-runner-unit-tests-master]# pwd
/root/php-sonar-runner-unit-tests-master

# 直接在php目录运行sonar-scanner,用于实现代码质量分析

[root@node1 php-sonar-runner-unit-tests-master]# /usr/local/sonar-scanner/bin/sonar-scanner

在sonar管理界面查看扫描结果:
dashboard --> home 点项目名称可以查看更具体的信息

2.1.4:代码规则:

2.4:如何让jenkins关联到sonar scanner?
有两种方式保存配置文件,一是保存在项目里面,二是在jenkins管理界面进行配置:
2.4.1:在jenkins插件安装界面安装SonarQuebe Scanner for Jenkins插件:

2.4.2将jenkins关联sonar:
jenkins中操作:系统管理-系统设置,找到 SonarQube servers 部分

添加sonar访问地址,然后点保存

2.4.3添加扫描器:
2.4.3.1:#系统管理–global-tool-ocnfigration --> 添加本地sonar scanner,然后点保存

2.5:配置jenkins项目构建操作:

2.5.1:复制之前sonar scanner的代码检测配置文件内容,如:

# cat /root/php-sonar-runner-unit-tests-master/sonar-project.properties

sonar.projectKey=org.sonarqube:php-ut-sq-scanner
sonar.projectName=PHP :: PHPUnit :: SonarQube Scanner
sonar.projectVersion=1.0
sonar.sources=src
sonar.tests=tests
sonar.language=php
sonar.sourceEncoding=UTF-

2.5.1:选择自己的项目(web-demo)-构建触发器-构建-execute sonarqube scanner,将配置文件的内容修改成如下格式填写完成后点保存:

sonar.projectKey=web-demo
sonar.projectName=web-demo
sonar.projectVersion=1.0
sonar.sources=./
sonar.language=php
sonar.sourceEncoding=UTF-

可以看到,右边多了个快捷方式

2.6:测试jenkins项目构建:
2.6.1:在jenkins选择自己的项目点击立即构建,以下是构建成功的界面:

2.6.2:在sonar查看是否有代码扫质量分析结果:

2.7:添加构建后操作
2.7.1:添加邮件通知,当构建失败后向指定的邮箱通知失败信息:
#发件箱设置:

2.7.2:将github服务关闭,然后构建项目,由于git服务无法访问所以肯定会导致项目构建失败触发邮件通知:
2.7.2.1:关闭git服务:
# gitlab-ctl stop
2.7.2.2:构建项目,以下是构建失败的控制台输出信息:

2.7.2.3:以下是失败的邮件通知:

持续集成之②:整合jenkins与代码质量管理平台Sonar并实现构建失败邮件通知的更多相关文章

  1. 持续集成学习6 jenkins自动化代码构建

    一.实验目标 二.配置 1.配置mvn构建 [root@node1 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3 ...

  2. 持续集成学习7 jenkins自动化代码构建

    一.整体功能 1.触发上下游构建 2.我们在触发一个job的时候顺便丢一些参数过去,这些参数有可能是我这次编译过程中产生的一些地址,版本号或动态的一些东西丢到下游作为下游的构建参数 3.不同种类的视图

  3. 持续集成工具之jenkins+sonarqube做代码扫描

    上一篇我们主要聊了下代码质量管理平台sonarqube的安装部署以及它的工作方式做了简单的描述和代码扫描演示:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13 ...

  4. 持续集成篇_05_SonarQube代码质量管理平台的介绍与安装

    1.SonarQube的介绍 SonarQube是一个管理代码质量的开放平台. 可以从七个维度检测代码质量(为什么要用SonarQube): (1)复杂度分布(complexity):代码复杂度过高将 ...

  5. 持续集成①安装部署jenkins从git获取代码

    持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...

  6. 手把手教你用SonarQube+Jenkins搭建--前端项目--代码质量管理平台 (Window系统)

    前言 网上教程大多介绍的是Linux系统下SonarQube+Jenkins如何使用,这是因为这两款软件一般都是部署在服务器上,而大多数服务器,采用的都是Linux系统.大多数服务器用Linux的原因 ...

  7. Jenkins持续集成学习-搭建jenkins问题汇总

    目录 Jenkins持续集成学习5-搭建jenkins问题汇总 目录 前言 问题列表 nuget还原包问题 编译问题 SVN更新问题 参考文档 Jenkins持续集成学习5-搭建jenkins问题汇总 ...

  8. Git Hooks、GitLab CI持续集成以及使用Jenkins实现自动化任务

    Git Hooks.GitLab CI持续集成以及使用Jenkins实现自动化任务 前言 在一个共享项目(或者说多人协同开发的项目)的开发过程中,为有效确保团队成员编码风格的统一,确保部署方式的统一, ...

  9. 持续集成 windows下jenkins常见问题填坑

    [过程改进]持续集成 windows下jenkins常见问题填坑 没有什么高深的东西,1 2天的时间大多数人都能自己摸索出来,这里将自己遇到过的问题分享出来避免其他同学再一次挖坑. 目录 1. 主从节 ...

随机推荐

  1. 我的长大app开发教程第二弹:完成ContentFragment底部按钮

    在开始之前,先上一张效果图 突然发现有点知乎的味道...的确..知乎灰#989898,知乎蓝15,136,235(逃.... 1.学P图 想我大一的时候也用过不少Adobe的软件,昨天重新打开我的Ph ...

  2. Ubuntu Server Download

    点击查看所有版本(中国站点) http://mirror.lzu.edu.cn/ubuntu-releases/

  3. Javaweb学习笔记——(十)——————response对象,response字符流缓冲器,响应头,状态码,重定向,requset对象,路径和乱码

    请求响应对象: request和response *当服务器接收都请求后,服务器会创建request和response对象,把请求数据封装到request对象中: *然后调用Servlet的sevic ...

  4. 五、文件IO——dup 函数

    5.1 dup 函数---复制文件描述符 5.1.1 简单cat实现及输入输出重定向 io.c #include <sys/types.h> #include <sys/stat.h ...

  5. 求f(n)=[n/1]+[n/2]+---+[n/n]的值 简单杂题

    这种小题首先根据 n/1+n/2+n/3+--+n/n=nlogn+欧拉常数r 可以知道 1e12的范围也不会爆longlong,不需要写高精度(到现在都不会写) 再根据数据范围可知O(n)级别的暴力 ...

  6. 20155324 《Java程序设计》实验三 敏捷开发与XP实践

    20155324 <Java程序设计>实验三 敏捷开发与XP实践 实验内容 XP基础 1.XP核心实践 2.相关工具 实验步骤 敏捷开发与XP 1.敏捷开发(Agile Developme ...

  7. Coursera, Deep Learning 1, Neural Networks and Deep Learning - week2, Neural Networks Basics

    Logistic regression Cost function for logistic regression Gradient Descent 接下来主要讲 Vectorization Logi ...

  8. flex布局下overflow失效问题

    经常我们会使用flex布局,但是flex布局常常会遇到一些不可思议的麻烦,下面介绍一下overflow遇到的麻烦 我在工作中使用了左右两栏布局 .container { display: flex; ...

  9. python面向对象--私有和继承

    一. 私有属性和私有方法 应用场景 在实际开发中,对象的某些属性或方法可能只希望在对象的内部使用,而不希望在外部被访问到 私有属性 就是 对象 不希望公开的属性 (属性即类里面的变量) 私有方法 就是 ...

  10. jira和svn关联后,不显示Subversion Commits标签或不显示svn提交信息

    1.jira的版本是7.3.6 2.不显示Subversion Commits标签或不显示svn提交信息 其实是权限的分配问题 3.管理员登录 找到对应项目的权限管理 4.[评论权限]——[编辑所有评 ...