安装Jenkins和创建任务这些操作网上一搜一大把,这里就没必要写了,直接就开始编译、单元测试,覆盖,git提交触发构建,构建失败发送给提交人邮件。

因为项目比较复杂,为了懒省事我直接在CI服务器上安装了visual studio 2017 (主要就是为了那个VsDevCmd.bat)。

这里呢为了保证CI能够正常编译、执行单元测试、覆盖率,我们对.net 项目做了如下约定:

1.单元测试一般使用xunit 进行编写。

2.Mock框架。

对于core 项目需要安装一下几个NuGet包

1.coverlet.msbuild  覆盖率

2.XunitXml.TestLogger xml 格式记录器

说完一些前置条件,现在开始正式的编译,执行单元测试,覆盖率

对于.net framework 项目我们的编译肯定是使用MSBUILD

搭建基于Jenkins的CI服务器-LMLPHP

第一条命令是在当前的命令行窗口创建一个MSBuild 指令,然后 进行Nuget包还原,编译项目 ,后面的参数可以自行修改。

第二条指令是进行单元测试与覆盖率,因为执行覆盖率时要执行单元测试,所以我就把两条指令放在了一起,避免不必要的损耗。

搭建基于Jenkins的CI服务器-LMLPHP

生成覆盖率报告我使用的工具是OpenCover ,OpenCover 生成的报告是xml格式,Jenkins 无法识别(也可能是我不会折腾),所有我又使用了ReportGenerator工具对xml 进行了一个转换,把它转换成html格式。然后用Jenkins的HTML 报表插件展示出来。

对于单元测试报告,因为Jenkins有相关的插件,所以直接就用xunit生成的xml格式的测试报告就可以了。

这里说明一下,在执行单元测试时我使用的xunit.console.exe 这个命令行工具。没有把执行单元测试的步骤放入到MSBuild任务中去,有兴趣的人可以自行研究。

好了到这里呢就完成了.net framework 项目的编译、单元测试、覆盖率 环节。

对于Core项目,它的编译我使用的dotnet build ***.sln 方式,单元测试使用的是dotnet test ***.csproj 。之前说过对于core的覆盖率我使用的是coverlet.msbuild 这个MSBuild 扩展命令工具包。所以在执行单元测试的同时就可以生成覆盖率的报告。对于xunit的单元测试结果,我使用的XunitXml.TestLogger 这个MSBuild 扩展命令工具包。

具体的命令如下:

搭建基于Jenkins的CI服务器-LMLPHP

这一个dotnet test命令就完成了所有的工作,同样我最终还是使用ReportGenerator这个工具将覆盖率报告转换成HTML格式。

最终的展示结果:

搭建基于Jenkins的CI服务器-LMLPHP

上图是构建后的总览图。

搭建基于Jenkins的CI服务器-LMLPHP

上图是覆盖率结果报表。

搭建基于Jenkins的CI服务器-LMLPHP

单元测试报表

对于git提交后触发构建,在git仓库为项目添加一个钩子即可。

05-26 15:32