持续集成之②:整合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. TCP简介(一)

    1. TCP如何利用IP达到自己目的 1.1 IP特点 无连接 不可靠 1.2 TCP将应用程序的传输数据分割成合适的数据块 1.3 定时器 1.4 延迟确认 1.5 检验和 1.6 流量控制 2. ...

  2. Golang入门教程(十四)结构体和类详解

    golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class. 类声明 type Book struct { Title string Author stri ...

  3. Golang入门教程(四)变量声明

    Go 语言变量名由字母.数字.下划线组成,其中首个字母不能为数字. 一.Go的语言结构 1.Go的语言基础部分由这几个部分组成 包声明 引入包 函数 变量 语句&表达式 注释 比如下面这个简单 ...

  4. JS创建对象之组合使用构造函数模式和原型模式

    function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.friends = { ...

  5. Continuous Design

    Continuous Design https://www.martinfowler.com/ieeeSoftware/continuousDesign.pdf T he rising popular ...

  6. 【C++】reference parameter-引用参数

    1.reference parameter 以下两个函数等效,只调用方式不同: 1> 1 int reset(int i){ 2 i = 13; 3 return i; 4 } 5 6 int ...

  7. 关于PHP面向对象中—类的定义与对象的实例化操作以及构造、析构函数的特殊用法

    类的定义与对象的实例化操作 <?php //类里面的成员是属于对象的class Hero{    public $name;//成员变量    //成员属性(存在于强类型语言中)    prot ...

  8. luogu P3237 [HNOI2014]米特运输

    传送门 谢特运输 先要搞懂题目是什么意思,简化版题意就是一棵有根树,要使得每个点都满足任意一个儿子的权值等于这个点权值除以儿子数量,问最少要修改多少个点的点权 就可以一边dfs求出每个点权值是点1的多 ...

  9. python 的基础 学习第十天函数的初始

    1,什么是函数,函数就是封装一个功能. 怎么定义函数. # def my_len():#def 是关键字,定义一个一个函数.#my_len():就是函数名,必须和关键字加一个空格,后面加括号和冒号.d ...

  10. PLSql的使用

    1.安装 plsqldeveloper和数据库驱动-ODAC 2.在数据库驱动ODAC中添加 Oracle客户端的网络服务名配置文件tnsnames.ora 路径为: 3.汉化 直接运行Languag ...