搭建基于Jenkins的CI服务器
安装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
第一条命令是在当前的命令行窗口创建一个MSBuild 指令,然后 进行Nuget包还原,编译项目 ,后面的参数可以自行修改。
第二条指令是进行单元测试与覆盖率,因为执行覆盖率时要执行单元测试,所以我就把两条指令放在了一起,避免不必要的损耗。
生成覆盖率报告我使用的工具是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 扩展命令工具包。
具体的命令如下:
这一个dotnet test命令就完成了所有的工作,同样我最终还是使用ReportGenerator这个工具将覆盖率报告转换成HTML格式。
最终的展示结果:
上图是构建后的总览图。
上图是覆盖率结果报表。
单元测试报表
对于git提交后触发构建,在git仓库为项目添加一个钩子即可。
最新文章
- 敏捷转型历程 - Sprint3 一团糟的演示会
- C++函数指针总结
- 旧文备份:CANopen协议PDO的几种传输方式
- 软件产品案例分析----K米app
- 3到6年的.NETer应该掌握哪些知识?
- mysql 全文搜索的FULLTEXT
- 重力感应操控(unity iphone)
- Hadoop MapReduce概念学习系列之mr程序组件全貌(二十)
- eclipse 配置git ssh登录
- windows下创建.htaccess文件之讲解
- Java序列化之transient和serialVersionUID的使用
- 基于C#的SolidWorks插件开发(2)--创建插件
- 快速打出System.out.println(";";);
- 重写 libev 的 EV_WIN32_HANDLE_TO_FD
- HDU 3068 最长回文 Manacher算法
- C#跨窗体调用控件(委托回调函数使用例子)
- QT信号和槽
- SecureCRT8.0设置语法高亮
- openstack-ocata-环境准备1
- Go并发示例-Pool
热门文章
- NOIP赛前模拟20171027总结
- docker 查询或获取私有仓库(registry)中的镜像
- 【Visual Studio】error C2220: 警告被视为错误 - 没有生成“object”文件 (转)
- 04深入理解C指针之---指针优缺点
- sync fsync fdatasync
- AC日记——[福利]可持久化线段树 cogs 2554
- Vijos——P1137 组合数
- Socks5代理Socks5 Proxy
- Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) Minimization dp
- Ural 1780 Gray Code 乱搞暴力