要解决的问题

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进行静态代码检查的更多相关文章

  1. jenkins+findbugs+checkstyle+PMD静态代码检查(二)

    可以根据自己的需求选中对应的插件进行配置(不一定非要同时配置三个插件) jenkins:持续集成的工具 fundbugs:检测代码静态错误的插件  例如:定义了没有用到的对象,string类型的比较使 ...

  2. FindBugs:Java 静态代码检查

    在使用 Jenkins 构建 Java Web 项目时候,有一项叫做静态代码检查,是用内置的 findBugs 插件,对程序源代码进行检查,以分析程序行为的技术,应用于程序的正确性检查. 安全缺陷检测 ...

  3. Python静态代码检查工具Flake8

    简介 Flake8 是由Python官方发布的一款辅助检测Python代码是否规范的工具,相对于目前热度比较高的Pylint来说,Flake8检查规则灵活,支持集成额外插件,扩展性强.Flake8是对 ...

  4. OC静态代码检查实战

    此文已由作者杨晓授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 在Mac OS系统上,采用Xcodebuild Analyze命令和OClint工具,对iOS项目进行静态代码 ...

  5. 静态代码检查工具 cppcheck 的使用

      CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们 ...

  6. 静态代码检查工具 cppcheck 的使用(可分别集成到VS和QT Creator里)

    CppCheck是一个C/C++代码缺陷静态检查工具.不同于C/C++编译器及其它分析工具,CppCheck只检查编译器检查不出来的bug,不检查语法错误.所谓静态代码检查就是使用一个工具检查我们写的 ...

  7. C#静态代码检查工具StyleCode

    C#静态代码检查工具StyleCode -- 初探 最近我们Advent Data Service (ADS) 在项目上需要按照代码规范进行代码的编写工作,以方便将来代码的阅读与维护. 但是人工检查起 ...

  8. PC-lint 简明教程(C/C++静态代码检查工具)

    前言 PC-lint是一款小而强大的C/C++静态代码检查工具,它可以检查未初始化变量,数组越界,空指针等编译器很难发现的潜在错误.在很多专业的软件公司如Microsoft,PC-Lint检查无错误无 ...

  9. 基于Source Insight_Scan的C/C++静态代码检查工具安装说明

    基于Source Insight_Scan的C/C++静态代码检查工具安装说明   本文链接:https://blog.csdn.net/M19930517/article/details/79977 ...

随机推荐

  1. javascript初学者必须注意的7个细节

    [IT168 技术]每种语言都有它特别的地方,对于JavaScript来说,使用var就可以声明任意类型的变量,这门脚本语言看起来很简单,然而想要写出优雅的代码却是需要不断积累经验的.本文列举Java ...

  2. Strom topology 设计的演进

    场景:采集日志数据,日志数据有多个字段组成,需求是根据日志数据中的N个字段(维度),去统计指标数据(个数.平均值)等.

  3. 【转】Elasticsearch学习

    原作者:铭毅天下,原文地址:blog.csdn.net/laoyang360 https://blog.csdn.net/wojiushiwo987/article/details/52244917 ...

  4. COSO企业风险管理框架2017版发布!看看有哪些变化?

    近期,COSO发布了新版(2017版)的企业风险管理框架:<企业风险管理—与战略和业绩的整合>.相较于2004年发布的上一版框架<企业风险管理—整合框架>,新框架强调了制定战略 ...

  5. MongoDB与CouchDB 全方位对比

    http://blog.nosqlfan.com/html/1519.html 本文见于MongoDB官方网站,MongoDB与CouchDB 很相似,他们都是文档型存储,数据存储格式都是JSON型的 ...

  6. php中的抽象方法和抽象类,简单明了,一点通

    1.什么是抽象方法?    我们在类里面定义的没有方法提的方法就是抽象方法.所谓的没有方法体指的是,在声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时方 ...

  7. SEO概念及SEO相关优化

    SEO是英文Search Engine Optimization的缩写, 中文意译为“搜索引擎优化”. 简单地说, SEO是指从自然搜索结果获得网站流量的技术和过程. http://www.imooc ...

  8. django项目部署上线

    前言 完善的django项目上线,有很多种上线的方法,比如apache, uwsgi, nginx等.这里只介绍2种,一种是django自带的,另外一种则是nginx + uwsgi完成介绍.这里的系 ...

  9. Selenium2Lib库之鼠标事件常用关键字实战

    1.2 鼠标事件常用关键字 1.2.1 Click Button关键字按F5 查看Click Button关键字的说明,如下图: Click Button关键字 是用于点击页面上的按钮.参数locat ...

  10. arcEngine开发之根据点坐标创建Shp图层

    思路 根据点坐标创建Shapefile文件大致思路是这样的: (1)创建表的工作空间,通过 IField.IFieldsEdit.IField 等接口创建属性字段,添加到要素集中. (2)根据获取点的 ...