Jenkins+Sonar集成对代码进行持续检测
介绍
SonarQube(曾用名Sonar(声纳)[1])是一个开源的代码质量管理系统。
特征
- 支持超过25种编程语言[2]:Java、C/C++、C#、PHP、Flex、Groovy、JavaScript、Python、PL/SQL、COBOL等。(不过有些是商业软件插件)
- 可以在Android开发中使用
- 提供重复代码、编码标准、单元测试、代码覆盖率、代码复杂度、潜在Bug、注释和软件设计报告[3][4]
- 提供了指标历史记录、计划图(“时间机器”)和微分查看
- 提供了完全自动化的分析:与Maven、Ant、Gradle和持续集成工具(Atlassian Bamboo、Jenkins、Hudson等)[5][6][7]
- 与Eclipse开发环境集成
- 与JIRA、Mantis、LDAP、Fortify等外部工具集
- 支持扩展插件[8][9]
- 利用SQALE计算技术债务[10]
- 支持Tomcat。不过计划从SonarQube 4.1起终止对Tomcat的支持[11]。
【以上来自维基百科】
SonarQube 平台是 由 4 个 部分组成:
- SonarQube Server
- SonarQube Database (这次并没有关注这块)
- SonarQube Plugins
- SonarQube Scanner
功能介绍:
SonarQube Scanner在项目代码的本地去扫描代码最后发送到SonarQube Server
SonarQube Plugins这次我理解的应该是IDE的插件,我们这次也用了Jenkins的SonarQube Plugins但是我理解这的这个应该单纯的去封装了扫描代码执行的命令。
SonarQube Database是用来做数据持久化的,本次没有关注这块,使用的sonar内置的默认数据库。
SonarQube Server是sonar的服务器端会把SonarQube Scanner发送的数据进行分析最后显示在web页面上。
框架
上图是理想状态下的架构,我们这次比较简单,思路是在Jenkins上配置源码管理git,给Jenkins安装SonarQube Plugins的插件,使用我们组的一个服务器当节点安装了SonarQube Scanner的环境,最后通过Jenkins手动选择分支触发,Jenkins会调用节点服务器去gitlab拉取我们的代码,使用SonarQube Scanner进行扫描之后,发送到SonarQube Server。后期打算做成在merge回dev分支的时候(PR)自动去构建这个过程,并添加gitlab的一些代码质量分析之类的操作.........
部署
1.安装jdk
不管是SonarQube Scanner还是SonarQube Server都是依赖于jdk的,所以需要安装jdk,这里安装的是openJDK(JDK应该会更好,后面说),解压之后直接把到bin的路径复制下来添加到环境变量path里即可。(我这块是这样D:\openjdk-11.0.2_windows-x64_bin\jdk-11.0.2\bin;)
2.安装SonarQube Scanner
因为我们的组的服务器是windows server 2008R2 SP1服务器,所以这块只说明Windows的。
我们组有API(.net)和nc3.0(angular)的项目需要扫描,而扫描.net的sonar比较特殊是基于MSbuild的,所以要安装SonarQube Scanner for MSBuild。
SonarQube Scanner for MSBuild
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+MSBuild
一般的SonarQube Scanner
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
下载下来之后解压,配置环境变量path
就是这两个路径,其实如果只是和Jenkins去集成这里可以不用配置环境变量,因为Jenkins里配置SonarQube Plugins的时候会让你配置SonarQube Scanner 的路径。(亲测)
3.安装代码编译的环境
.Net framework 4.6以上版本
安装时要注意.Net framework 4.6以上版本需要Windows Server 2008R2 SP1以上版本(注意是SP1)
https://www.microsoft.com/en-us/download/details.aspx?id=48130
NodeJS v6以上
google或者百度自行解决(nc3.0的环境)
MSBuild
因为我们API代码是在VS2017里开发的所以MSBuild需要2017的MSBuild,安装MSBuild具体要看.net项目的C#语法版本(或者说是vs的版本,最好按照vs版本,因为其实自我感觉我们都不是很关注C#的语法版本,可能只知道vs那个版本支持什么语法,所以很多公司没有约束C#语法版本而是约束了vs的版本)。
没有网需要自己去做离线包,具体文档https://docs.microsoft.com/en-us/visualstudio/install/workload-component-id-vs-build-tools?view=vs-2019
下载在线版的.exe,在根目录执行以下代码。
.\vs_buildtools__1829948457.1521995183.exe --layout . --add Microsoft.VisualStudio.Workload.ManagedDesktopBuildTools --add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Workload.NetCoreBuildTools --add Microsoft.VisualStudio.Workload.UniversalBuildTools --add Microsoft.VisualStudio.Workload.WebBuildTools --add Microsoft.VisualStudio.Workload.OfficeBuildTools --add Microsoft.VisualStudio.Workload.VCTools --lang en-US |
4.安装Jenkins的插件
SonarQube Plugins和MSbuild for Jenkins
系统管理->管理插件 搜索并且安装下图两个插件
SonarQube Plugins 里边会包含for MSbuild的功能
这块遇到的问题是我们的服务器没有网,所以这块安装的时候是从高级里上传下载好的插件(.hpi)安装的(下载地址http://updates.jenkins-ci.org/download/plugins/)
坑:
什么?听说你们的服务器也没网?那太好了。
你以为这就完了吗?
你会发现你上传的这个插件,安装的时候会报错。(傻了吧!!!)
就像这样:
这是因为你安装的插件有别的依赖,这时候你就需要打开详细找到截图上类似这样的url自己去手动下载依赖的插件并且按照上图的顺序去安装
5.配置Jenkins插件
设置MSBuild
设置SonarQube Server地址
系统管理 > 系统设置 > Add SonarQube > SonarQube servers 修改如下:
设置SonarQube Scanner插件
系统管理 >Global Tool Configuration
这块要设置两个SonarQube Scanner for MSBuild和SonarQube Scanner
这就是我之前说的不用在节点的机器上配置环境变量的原因
6.构建项目
新建>构建一个自由风格的软件项目
sonar.projectKey指定sonar server上的key(唯一的)
sonar.projectName指定sonar server上的Project的名称
sonar.sources 定义了需要分析的源代码位置(示例中的$WORKSPACE 所指示的是当前 Jenkins 项目的目录)
.Net项目
可以试下效果了
Jenkins+Sonar集成对代码进行持续检测的更多相关文章
- 使用 Jenkins 与 Sonar 集成对代码进行持续检测
SonarQube 与 Jenkins 简介 SonarQube是 一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题.同时,它提供了丰富的插件,支持多种语言的检测 ...
- Jenkins+maven+git+sonar 系统持续集成&代码单測管理
Jenkins+maven+git+sonar 系统持续集成&代码单測管理 Jenkins的安装 Jenkins是基于Java开发的一种持续集成工具,用于监控持续反复的工作.功能包含: 1.持 ...
- Jenkins+Sonar搭建持续集成和代码质量检查环境
Jenkins+Sonar搭建 一.相关环境及下载地址 系统:Ubuntu JDK:1.8 MySQL:5.7 软件包: jenkins_2.121.3_all.deb sonarqube-7.3.z ...
- 持续集成之代码质量管理-Sonar [三]
转载:https://www.abcdocker.com/abcdocker/2053 摘要 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工 ...
- 持续集成之代码质量管理-Sonar
原文:http://blog.csdn.net/abcdocker/article/details/53840582 Sonar介绍 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Son ...
- 持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本
持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本 一:本文通过jenkins调用shell脚本的的方式完成从Git服务器获取代码.打包.部署到web服务器.将web服务器从负 ...
- 持续集成①安装部署jenkins从git获取代码
持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...
- 通过静态分析和持续集成 保证代码的质量 (Helix QAC)1
前言 现代软件开发团队面临着很多挑战,这些挑战包括:产品交付期限越来越紧,团队的分布越来越广,软件的复杂度越来越高,而且对软件的质量要求越来越高. 本文分为两个章节.第一章讨论持续集成的原理,持续集成 ...
- 使用jenkins配置.net mvc网站进行持续集成二
上一篇使用jenkins配置.net mvc网站进行持续集成一只是简单介绍了jenkins构建站点到本地服务器,这一篇,就来讲解如何部署站点到指定的服务器上面. 1.IIS远程发布配置 1.在服务器管 ...
随机推荐
- Python基础之软件目录结构规范
设计一个层次清晰的目录结构,就是为了达到这两点: 可读性高:不熟悉项目的人,一眼就能看懂目录结构. 可维护性高:随着时间的推移,代码/配置的规模增加,项目结构不会混乱,仍然能够组织良好. 目录组织方式 ...
- Highway Project---zoj3946(最短路SPFA)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5718 题意: 有n个点 m(n,m<=10^5)条路,现在要建 ...
- java-mybaits-00801-逆向工程
1.1 什么是逆向工程 参看地址:http://www.mybatis.org/generator/index.html 使用官方网站的mapper自动生成工具mybatis-generato ...
- JS中手动触发事件的方法
如果大家将一张网页看成一个form的话,大致上就成了一个web form的模型.在win form 下要想手动触发某一个对象的事件是很简单的,只要发送一条消息即可达成.(PostMessage) 但是 ...
- PAT 1043 Is It a Binary Search Tree[二叉树][难]
1043 Is It a Binary Search Tree(25 分) A Binary Search Tree (BST) is recursively defined as a binary ...
- Java之Integer源码
1.为什么Java中1000==1000为false而100==100为true? 这是一个挺有意思的讨论话题. 如果你运行下面的代码 Integer a = 1000, b = 1000; Syst ...
- MySQL connector c++使用笔记
MySQL的connector官方地址: http://dev.mysql.com/downloads/connector/ 针对c++来说, 可以选择c或者c++的库. c++的实现是参考了java ...
- 钉钉,连续获取Token一样么? Js_ticket重复获取一样么?
经过测试,是一样的: Token的过期时间是2个小时: 2个小时后在获取则发生变化: js_ticket: 重复获取的值不同的:
- 《Java入门第二季》第二章 封装
什么是java中的封装1.封装的概念:隐藏信息.隐藏具体的实现细节. 2.封装的实现步骤: 1)修改属性的可见性,private.2)创建修改器方法和访问器方法,getXXX/setXXX.(未必一定 ...
- 前端学习笔记之CSS过渡模块
阅读目录 一 伪类选择器复习 二 过渡模块的基本使用 三 控制过渡的速度transition-timing-function 四 过渡模块连写 一 伪类选择器复习 注意点: #1 a标签的伪类选择器可 ...