Jenkins - 集成Sonar进行.NET代码扫描
在已有Jenkins的基础上集成Sonar对.NET项目进行静态代码扫描
一、简单说明
1)说明:本文所有操作在Windows 10和Windows Server 2019 Datacenter上均已测试成功。
2)适用范围:已有Jenkins、Sonar服务器。若无,请先自行搭建!
3)需求描述:使用Jenkins对.Net代码进行常规代码扫描,并将扫描结果上传至Sonar服务器。
4)环境准备:
Jenkins 2.89.3
SonarQube Server 6.7.1
JDK 1.8 下载地址1(aisy)
Git 2.6.1 下载地址2(59uy)
TortoiseSVN 1.10.6 下载地址3(bvre)
VS2015 用于安装MSBuild及其他编译构建所必须的环境 下载地址4(vuvd)
MSBuild 14.0.23107.0 用于执行编译构建,安装VS2015后会自动安装
Sonar-scanner 4.6.1 用于执行代码扫描 下载地址5(mprv)
—下载地址1—下载地址2— 下载地址3—下载地址4— 下载地址5—
二、专属slave搭建
该slave可以是一台物理主机或虚拟机,是Jenkins用于执行.NET代码编译构建及扫描的节点。由于.NET本身限制,该slave只能是windows系统。
1.安装JDK
slave连接至Jenkins需Java环境。
下载上文中相应的安装包进行安装。(安装指南)
2.安装Git及TortoiseSVN
用于从GitLab或SVN拉取代码。
下载上文中相应的安装包进行安装,双击运行后一直点击下一步即可,无特殊配置。
3.安装MSBuild及VS2015
MSBuild是.NET编译构建的工具,类似Java的Maven;而VS2015则用于提供编译构建时所必须的环境。
下载上文中的vs2015安装包并解压,解压后运行”vs_community.exe”进行安装,按照提示安装即可,无特殊配置。
4.安装Sonar-scanner
用于执行.NET代码扫描。
下载上文中相应的安装包,下载完成后解压至合适的文件夹即可使用。
三、Jenkins配置
1.配置SonarQube Server
用于在扫描任务结束后将扫描报告上传至该Server。
1)在Jenkins首页点击 ”系统管理” –> “系统设置”,找到”SonarQube Server”。
2)填入下图红框内的数据
a.”Name“: 随意填(也别太随意…),在有多个SonarQube Server时进行区分标识;
b.”Server URL“: 为sonar服务器的地址(域名IP都可);
c.”Server version“: 根据sonar服务器版本进行选择;
d.”Server authentication token“: 在sonar界面上生成后复制过来(不建议使用账号密码形式);(生成步骤)
2.新增Jenkins节点
将第二步搭建的slave关联为Jenkins的运行节点,专门用于.NET代码扫描。
1)在Jenkins首页点击 ”系统管理” –> “管理节点” –>”新建节点”。
2)填写节点名称,选择”固定代理”后点击OK
3)填写节点详情信息,填写完成后保存即可。
a.”of executors“:此节点可同时并行任务数,一般填4—8即可;
b.”远程工作目录“:此节点的工作目录,在第二步搭建的专属slave中创建一个空文件夹并将绝对路径复制过来即可(此目录要有足够的磁盘空间);
c.”标签“:用于在Jenkins job中指定特定节点执行任务,此处建议填写”.net”;
d.”用法“:选择”只允许运行绑定到这台机器的job”;
e.”启动方法“:选择”通过Java Web启动代理”,其余不用填写;
f.”Availability“:选择”尽量保持代理在线”;
g.”环境变量“:在此输入第二步专属slave的JAVA_HOME;
4)连接slave至Jenkins
创建成功后会显示下列信息,复制红框内命令在slave中用CMD执行即可
3.配置构建扫描工具
将第二步中安装的MSBuild及SonarQube Scanner for MSBuild关联到Jenkins,以便用户创建Jenkins job时可以使用。
1)在首页点击 “系统管理” –> “全局工具配置”,可以看到如下右图所示的两个插件;
2)MSBuild
点击”MSBuild安装”->”新增MSBuild”;请勿勾选自动安装,因为自动安装需连接github去下载安装包,机器不一定可以访问github。
a.”Name“:可随意填写;
b.”Path to MSBuild“:安装vs2015时自动安装至”C:/Program Files(x86)/MSBuild/14.0/Bin/amd64/MSBuild.exe”,此路径一般不会改变,填写之前先确认;
3)SonarQube Scanner for MSBuild
同MSBuild,”MSBUILD_SQ_SCANNER_HOME”为安装Sonar-scanner的绝对路径。
四、创建Jenkins任务
1.新建任务
在Jenkins首页点击”新建”,输入任务名称后选择”构建一个自由风格的软件项目“,然后点击OK。
2.配置任务
1)指定节点运行,填写新建Jenkins节点时输入的标签
2)绑定代码仓库。
根据实际情况,选择Git或者Subversion,并填写仓库地址、指定仓库授信。
3)配置构建步骤
在”增加构建步骤中”依次选择(必须是这个顺序)
”SonarQube Scanner for MSBuild - Begin Analysis” ->
”Build a Visual Studio project or solution using MSBuild” ->
”SonarQube Scanner for MSBuild - End Analysis”;
4)SonarQube Scanner for MSBuild - Begin Analysis
a.”SonarQube Scanner for MSBuild“:选择在这一步填写的名字;
b.”Project key“:在sonar中唯一的标识符;
c.”Project name“:在sonar中显示的项目名称;
d.”Project version“:此次扫描的版本(这次为1.0,下次为2.0,或者一直用1.0);
e.”Additional arguments“:扫描参数,可参考此说明;
5)Build a Visual Studio project or solution using MSBuild
a.”MSBuild Version“:选择在这一步填写的名字;
b.”MSBuild Build File“:.NET项目工程文件(一般填.sln文件),类似Maven所需要的POM文件。(“${WORKSPACE}”代表当前任务空间的路径)
c.”Command Line Arguments“:编译构建参数,可参考此说明;
Tips:
Jenkins会为每个任务创建一个工作区(文件夹),名字为任务名。Jenkins在clone代码时会直接将仓库中的所有文件clone至工作区,而不是在工作区里创建以仓库名命名的文件夹再将仓库clone至该文件夹下。