搭建基于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仓库为项目添加一个钩子即可。

转载于:https://www.cnblogs.com/pjjwpc/p/9333576.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397492.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BZOJ 1270: [BeijingWc2008]雷涛的小猫( dp )

简单的dp..dp(i,j) max(dp(x,y))cnt[i][j], (x,y)->(i,j)是合法路径.设f(i) max(dp(x,y))(1≤x≤N, 1≤y≤i), g(i,j) max(dp(i, k))(1≤k≤j)那么dp(i,j) max(f(jdelta), g(i,j1))cnt[i][j]. 递推即可. 时间复杂度O(NH)----------------------------------------------…

POJ 1141

题意&#xff1a;给出一个表达式的子序列&#xff0c;要你填充这个序列&#xff0c;保证最终形成的序列长度最短&#xff0c;也就是添加的括号最少 这个子序列要遵循括号匹配的原则。 分析&#xff1a;转移方程dp[i][j]min(dp[i][k],dp[k1][j]).i<k<j.dp[1][1]1; dp[i][j…

java中的NAN和INFINITY

2019独角兽企业重金招聘Python工程师标准>>> java浮点数运算中有两个特殊的情况&#xff1a;NAN、INFINITY。 1、INFINITY&#xff1a; 在浮点数运算时&#xff0c;有时我们会遇到除数为0的情况&#xff0c;那java是如何解决的呢&#xff1f; 我们知道&#xff0c;在…

Troubleshooting(三):网络

2019独角兽企业重金招聘Python工程师标准>>> 前言 在 Troubleshooting 过程中&#xff0c;检查完进程信息后&#xff0c;接下来就是排查网络情况的时候了&#xff0c;初略翻过《TCP/IP 详解卷一&#xff1a;协议》这本书&#xff0c;简直跟看《深入理解 Linux 内核》…

SqlServer 备份还原教程

看了众多教程&#xff0c;自己也写个增强记忆&#xff0c;错误地方麻烦指出。 ———————————————————————-备份——————————————————————– 1.打开数据库&#xff0c;成功连接 2.找到要备份的数据库&#xff0c;图中演示备份数据库te…

深入理解计算机系统----读书笔记

第二部分 信息的表示和处理 信息存储&#xff1a; 二进制&#xff08;0101001&#xff09;&#xff0c; 八进制&#xff0c;十六进制&#xff08;0x32FD&#xff09; 字&#xff08;word size&#xff09;指明整数和指针数据的标称大小&#xff08;normal size&#xff09;&…

OpenStack-Zun 使用

Zun组件简介 Zun是Openstack中提供容器管理服务的组件&#xff0c;于2016年6月建立。Zun的目标是提供统一的Openstack API用于启动和管理容器&#xff0c;支持多种容器技术。Zun原来称为Higgins&#xff0c;后改名为Zun。 Zun计划支持多种容器技术&#xff0c;Docker&#xff0…

js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么

js进阶 14-8 表单序列化函数serializeArray()和serialize()的区别是什么 一、总结 一句话总结&#xff1a;两者都是对表单进行序列化&#xff0c;serializeArray()返回的是json对象&#xff0c;serialize()返回的是json形式的字符串&#xff0c;使用起来都是一样的 1、$&#x…

linux 7.2中文命令,CentOS7如何支持中文显示

1.查看系统是否安装有中文语言包locale -a | grep "zh_CN" 命令含义&#xff1a;列出所有可用的公共语言环境的名称&#xff0c;包含有"zh_CN"若出现图中所示几项&#xff0c;那么说明系统中已经安装了语言包&#xff0c;不需要在安装。含义是&#xff1a;…

别人7天乐,运维还苦逼值班?

你被点名值班了吗&#xff1f;或者你的朋友、隔壁七大姑八大姨的侄子被点名值班了吗&#xff1f; 国庆将至&#xff0c;大家都开始研究各种度假攻略了&#xff0c;国内游、国外游、地球游、外星游。。。然而总有一票人&#xff0c;默默地职守着 -- tIT 公司运营支撑组/运维组。…

【常用损失函数】

一、Smooth L1 Loss 1.公式&#xff1a; 2.原因&#xff1a; L1损失使权值稀疏但是导数不连续&#xff0c;L2损失导数连续可以防止过拟合但对噪声不够鲁棒&#xff0c;分段结合两者优势。 二、Focal Loss 1.公式&#xff1a; 2.作用&#xff1a; 使得正负样本平衡的同时&#x…

linux 读取内存颗粒,linux查看主板内存槽与内存信息的命令dmidecode怎么用

在Linux中&#xff0c;我们常常使用命令来实现许多操作&#xff0c;比如查看内存信息等&#xff0c;下面小编就为大家带来一篇linux查看主板内存槽与内存信息的命令dmidecode方法。小编觉得挺不错的&#xff0c;现在就分享给大家&#xff0c;也给大家做个参考。一起跟随小编过来…

Java对象容器——List

为什么80%的码农都做不了架构师&#xff1f;>>> 在Java中&#xff0c;我们可以用数组来存放同类型的变量或对象&#xff0c;但是数组有一个缺陷&#xff0c;它的长度不可变&#xff0c;必须在定义时给定其长度&#xff0c;所以说在一些场合下不适用。例如我们要存放…

STL学习笔记(数值算法)

运用数值算法之前必须先加入头文件<numeric> 加工运算后产生结果 1.对序列进行某种运算 T accumulate(InputIterator beg,InputIterator end, T initValue) T accumulate(InputIterator beg,InputIterator end, T initValue,BinaryFunc op) 1.第一种形式计算InitValue和…

angualejs

为什么80%的码农都做不了架构师&#xff1f;>>> http://segmentfault.com/a/1190000000347412 http://www.xker.com/page/e2015/06/199141.html http://www.runoob.com/angularjs/angularjs-application.html http://blog.csdn.net/lglgsy456/article/details/3690…

SPOJ SORTBIT Sorted bit squence (数位DP,入门)

题意&#xff1a; 给出一个范围[m,n]&#xff0c;按照二进制表示中的1的个数从小到大排序&#xff0c;若1的个数相同&#xff0c;则按照十进制大小排序。求排序后的第k个数。注意&#xff1a;m*n>0。 思路&#xff1a; 也是看论文的。一开始也能想到是这种解法&#xff0c;枚…

mysql日志(介绍 路径修改 备份)

2019独角兽企业重金招聘Python工程师标准>>> 环境&#xff1a;senos6 软件&#xff1a;mysql2.6.20 mysql日志&#xff1a; 错误日志 一般查询日志 慢查询日志 二进制日志 只记录DDL&#xff0c;DML等引起数据库改变的操作都会记录下来 复制&am…

Algorithm I assignment Collinear

这本来应该是第三周的作业&#xff0c;但是由于其他作业逼近deadline&#xff0c;暂时推后了一周完成。 这周的assignment大大提高了我对这门课的看法&#xff0c;不得不说&#xff0c;Algorithms这门课的assignment部分设计得很好。为什么好&#xff1f;个人认为有以下几点&am…

Java BigDecimal详解

1.引言 float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算&#xff0c;这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而&#xff0c;它们没有提供完全精确的结果&#xff0c;所以不应该被用于要求精确结果的场合。但是…

windows 串口编程 c语言,windows下C语言版串口发送程序(基于VS2017)

#include "tchar.h"#include int main(){/*****************************打开串口*************************************/HANDLE hCom;//全局变量&#xff0c;串口句柄hCom CreateFile(_T("COM3"),//COM3口GENERIC_READ | GENERIC_WRITE,//允许读和写0,/…