在Jenkins中使用sonar进行静态代码检查
要解决的问题
jenkins自动构建完成后,希望能通过sonar静态代码检查生成一份报告,给与开发人员对当前代码的做一个质量评估和修改意见
1.安装并配置sonar服务器
懒得说,跟着官方文档走就行,这边主要的开发语言是.net core 和 typescript,所以在sonar server中的应用市场搜索对应语言安装就完事
安装参考地址:https://docs.sonarqube.org/display/SONAR/Setup+and+Upgrade
2.jenkins机器下载sonar扫描器
.net core 扫描器:https://docs.sonarqube.org/display/SCAN/Scanning+on+Linux+or+macOS+with+Scanner+4.0.x
typescript 扫描器:https://docs.sonarqube.org/display/PLUG/SonarTS
路径地址替换自己的
.net core :/opt/sonar-scanner-netcore/sonar-scanner-3.1.0.1141/conf
默认扫描器:/opt/sonar-scanner/conf
该路径下有配置文件:sonar-scanner.properties
修改该配置文件中的sonar.host.url=http://192.168.1.133:9000 为自己的sonar server服务器地址。
3.创建jenkins构建任务
选择创建流水线任务,也就是pipeline。因为我们有一个自动化流程管理工具,所以job的触发构建动作是在自动化工具中实现的。这里只是怎么调用sonar-scanner。
自动化流程工具传递参数(需要扫描的站点名称,类型),进入jenkins的sonar扫描任务,
脚本做这么几个事情:
1.根据传入的站点名称,获取当前站点名称在jenkins的配置,然后从配置文件中获取源代码地址,
2.拉取源代码
3.sonar-scanner。
jenkins 内部对象api文档地址:http://javadoc.jenkins-ci.org/allclasses-noframe.html
jenkins pipeline参考地址:https://jenkins.io/doc/book/pipeline/syntax/
pipeline script脚本如下:
//@NonCPS 标记当前方法的返回值不需要序列话,因为 def job,这里的job对象不能被序列化。
@NonCPS
def getUrl(){
def job=jenkins.model.Jenkins.getInstanceOrNull().getItem("${site_name}");
if(job==null){
throw new hudson.AbortException("not found jenkins job ${site_name}")
}
def jobScmUrl=job.getScm().getUserRemoteConfigs().get(0).getUrl();
//获得站点的git源代码地址
return jobScmUrl;
}
node {
//typescript扫描器需要运行tsc命令,但是我们的项目是全局安装的typescript,所以这里要指定NODE_PATH
environment {
NODE_PATH = '/usr/local/node/lib/node_modules';
}
stage('checkout') {
deleteDir();//删除当前构建的workspace
def scmUrl=getUrl();
// git 拉取代码到workspace,指定分支为master,并指定git使用的SSH证书id(3e6da11b-9f1d-42e2-8cb0-e8616ec0709e)
def scmOut=checkout([
$class: 'GitSCM',
branches: [[name: 'master']],
doGenerateSubmoduleConfigurations: false,
extensions: [],
submoduleCfg: [],
userRemoteConfigs: [[
credentialsId: '3e6da11b-9f1d-42e2-8cb0-e8616ec0709e',
url: scmUrl]]]);
}
if("${language}" == "netcore"){
//如果是.net core 类型的站点
stage('sonar-begin') {
sh script: "dotnet /opt/sonar-scanner-netcore/SonarScanner.MSBuild.dll begin /k:\"${site_name}\" /d:sonar.exclusions=/**/*.js"
}
stage('sonar-build') {
sh script: 'dotnet build';
}
stage('sonar-end') {
sh script: 'dotnet /opt/sonar-scanner-netcore/SonarScanner.MSBuild.dll end';
}
} else if("${language}" == "nodejs"){
stage('sonar-scanner') {
sh script: 'echo "------------$NODE_PATH"'
sh script: "sh /opt/sonar-scanner/bin/sonar-scanner -Dsonar.projectKey=${site_name} -Dsonar.sources=."
}
}
else{
echo 'not support language ${language}';
throw new hudson.AbortException("not support language ${language}")
}
}
4.成果展示
在Jenkins中使用sonar进行静态代码检查的更多相关文章
- jenkins+findbugs+checkstyle+PMD静态代码检查(二)
可以根据自己的需求选中对应的插件进行配置(不一定非要同时配置三个插件) jenkins:持续集成的工具 fundbugs:检测代码静态错误的插件 例如:定义了没有用到的对象,string类型的比较使 ...
- FindBugs:Java 静态代码检查
在使用 Jenkins 构建 Java Web 项目时候,有一项叫做静态代码检查,是用内置的 findBugs 插件,对程序源代码进行检查,以分析程序行为的技术,应用于程序的正确性检查. 安全缺陷检测 ...
- Python静态代码检查工具Flake8
简介 Flake8 是由Python官方发布的一款辅助检测Python代码是否规范的工具,相对于目前热度比较高的Pylint来说,Flake8检查规则灵活,支持集成额外插件,扩展性强.Flake8是对 ...
- OC静态代码检查实战
此文已由作者杨晓授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在Mac OS系统上,采用Xcodebuild Analyze命令和OClint工具,对iOS项目进行静态代码 ...
- 静态代码检查工具 cppcheck 的使用
CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们 ...
- 静态代码检查工具 cppcheck 的使用(可分别集成到VS和QT Creator里)
CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们写的 ...
- C#静态代码检查工具StyleCode
C#静态代码检查工具StyleCode -- 初探 最近我们Advent Data Service (ADS) 在项目上需要按照代码规范进行代码的编写工作,以方便将来代码的阅读与维护. 但是人工检查起 ...
- PC-lint 简明教程(C/C++静态代码检查工具)
前言 PC-lint是一款小而强大的C/C++静态代码检查工具,它可以检查未初始化变量,数组越界,空指针等编译器很难发现的潜在错误.在很多专业的软件公司如Microsoft,PC-Lint检查无错误无 ...
- 基于Source Insight_Scan的C/C++静态代码检查工具安装说明
基于Source Insight_Scan的C/C++静态代码检查工具安装说明 本文链接:https://blog.csdn.net/M19930517/article/details/79977 ...
随机推荐
- javascript初学者必须注意的7个细节
[IT168 技术]每种语言都有它特别的地方,对于JavaScript来说,使用var就可以声明任意类型的变量,这门脚本语言看起来很简单,然而想要写出优雅的代码却是需要不断积累经验的.本文列举Java ...
- Strom topology 设计的演进
场景:采集日志数据,日志数据有多个字段组成,需求是根据日志数据中的N个字段(维度),去统计指标数据(个数.平均值)等.
- 【转】Elasticsearch学习
原作者:铭毅天下,原文地址:blog.csdn.net/laoyang360 https://blog.csdn.net/wojiushiwo987/article/details/52244917 ...
- COSO企业风险管理框架2017版发布!看看有哪些变化?
近期,COSO发布了新版(2017版)的企业风险管理框架:<企业风险管理—与战略和业绩的整合>.相较于2004年发布的上一版框架<企业风险管理—整合框架>,新框架强调了制定战略 ...
- MongoDB与CouchDB 全方位对比
http://blog.nosqlfan.com/html/1519.html 本文见于MongoDB官方网站,MongoDB与CouchDB 很相似,他们都是文档型存储,数据存储格式都是JSON型的 ...
- php中的抽象方法和抽象类,简单明了,一点通
1.什么是抽象方法? 我们在类里面定义的没有方法提的方法就是抽象方法.所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时方 ...
- SEO概念及SEO相关优化
SEO是英文Search Engine Optimization的缩写, 中文意译为“搜索引擎优化”. 简单地说, SEO是指从自然搜索结果获得网站流量的技术和过程. http://www.imooc ...
- django项目部署上线
前言 完善的django项目上线,有很多种上线的方法,比如apache, uwsgi, nginx等.这里只介绍2种,一种是django自带的,另外一种则是nginx + uwsgi完成介绍.这里的系 ...
- Selenium2Lib库之鼠标事件常用关键字实战
1.2 鼠标事件常用关键字 1.2.1 Click Button关键字按F5 查看Click Button关键字的说明,如下图: Click Button关键字 是用于点击页面上的按钮.参数locat ...
- arcEngine开发之根据点坐标创建Shp图层
思路 根据点坐标创建Shapefile文件大致思路是这样的: (1)创建表的工作空间,通过 IField.IFieldsEdit.IField 等接口创建属性字段,添加到要素集中. (2)根据获取点的 ...