.NETCore下CI/CD之自动化测试
前言
为了呼应《中国.NET开发者峰会2019上海站》,作为演讲嘉宾,我希望和各位同行建立更多的互动,为此,我特地将部分演讲内容,整理成文章先行发布。本文从零开始,一步一步的引导,从安装JDK/Tomcat/jenkins 到建立第一个 CI/CD 项目,确保按照本文指引,能快速的在 CentOS 下,将 .NET Core 通过 jenkins 进行持续集成/持续部署,通过 jenkins,实现集成测试自动化,最终达到,快速构建项目,执行单元测试,生成测试报告,发送测试报告等工作,让测试工作伴随着 CI/CD 的持续进行而不断的对输出进行测试和校正,真正实现让本地单元测试在 CI/CD 中发挥其巨大的威力。
大会详情介绍请看文章末尾介绍。
安装JDK
首先安装Java环境,在Centos7上,搜索仓库内的包包
yum search java | grep --color OpenJDK
可以看到一堆颜色鲜艳的Java包包,接下来执行安装openjdk
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
安装完成后,执行命令
java -version
# 输出 OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) 表示安装成功
安装 Tomcat
安装Tomcat的话,直接下载Tomcat的zip包,下载地址:http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.27/bin/apache-tomcat-9.0.27.tar.gz 到官网下载是个好习惯,认准这只猫;然后上传到服务器,解压
比如我目前上传到目录: /usr/local/,执行解压命令,然后删除压缩包
tar -zxf apache-tomcat-9.0.27.tar.gz tomcat
rm -f apache-tomcat-9.0.27.tar.gz
实际上,按照一般情况下,直接执行下面的命令可以直接运行 Tomcat
/usr/local/tomcat/bin/startup.sh
但是作为测试要尽量贴近实际环境的极客追求来说,我们要把 Tomcat 作为系统服务,在系统开关机的时候随系统启动,那么就需要多做点小工作,不需要担心,下面的工作一共就花了2分钟左右
首先,我们需要指定 Tomcat.PID 进程文件,进入 /usr/local/tomcat/bin,编辑文件
vi /usr/local/tomcat/bin/setenv.sh
// 输入
CATALINA_PID="$CATALINA_BASE/tomcat.pid"
JAVA_OPTS="-server -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"
// 保存,退出编辑
增加 tomcat 账户并赋予权限
getent group tomcat || groupadd -r tomcat
getent passwd tomcat || useradd -r -d /opt -s /bin/nologin -g tomcat tomcat
chown -R tomcat:tomcat /usr/local/tomcat
防止Jeknins报错,先打个预防针,创建 .jenkins 目录
mkdir /opt/.jenkins
chown -R tomcat:tomcat /opt/.jenkins
编写系统服务文件
进入目录 cd /usr/lib/systemd/system,执行 ls -l,可以看到很多服务文件,然后我们直接执行下面的命令新建并编辑文件 tomcat.service
vi tomcat.service
tomcat.service 输入以下内容
[Unit]
Description=tomcat
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
Environment = "JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64"
PIDFile=/usr/local/tomcat/tomcat.pid
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
ExecReload=/bin/kill -s HUP $MAINPID
PrivateTmp=true
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target
// 保存,退出
系统服务文件创建完成,输入命令3连
systemctl enable tomcat.service
systemctl start tomcat.service
system status tomcat.service
如果以上的命令没有报错,那么恭喜你,你已经成功部署了 Tomcat 服务,接下来就是部署 jenkins 到 Tomcat
部署并运行jenkins
下载 jenkins 的war 包包,地址:https://jenkins.io/zh/download/ ,由于我们使用 Tomcat 托管,直接选择 Generic Java package(.war)下载即可
下载完成,直接将该 jenkins.war 包上传到 Tomcat 服务器目录 /usr/local/tomcat/webapps/ 下,这个时候你应该喝杯咖啡;稍等一会,Tomcat 马上就把 jenkins 做好了,大概在1分钟后,访问 jenkins 站点的地址
http://172.16.1.202:8080/jenkins
在 CentOS上,正常情况下,你是无法访问该地址的,需要打开 Tomcat 这只猫猫的侦听端口:8080,执行下面的命令,完成防火墙的设置
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd reload
再次访问 jenkins 的地址,你应该看到下面这个界面:
首次访问,按照提示,直接复制密码 cat /opt/.jenkins/secrets/initialAdminPassword 到输入框中进入 jenkins,稍后还需要创建用户,一并设置完成即可
等待 jenkins 初始化完成,可选择安装推荐的插件
请耐心等待插件安装完成....
设置账号密码
Jenkins已就绪
安装 .NET Core 环境
相信来到这个环节,大家都松了一口气,毕竟安装 sdk/runtime 这种事情,微软已经帮我们把脚本写好了,直接 copy 使用即可。访问 https://dotnet.microsoft.com/download/linux-package-manager/centos7/sdk-current
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
// 本文演示还是使用 2.2
sudo yum install dotnet-sdk-2.2
安装完成,按照国际惯例,输入 dotnet --version,输出版本号即为安装成功
创建一个.NET Core 的解决方案,包含单元测试
一个相对标准的解决方案结构如下,解决方案中必须包含 src/test 两个基础项目,表示该项目有单元测试,没有单元测试的项目是不完整的,这应当成为一种良好的编程规范。项目建立完成,我们本地执行单元测试看看结果。
dotnet test
其中,Ron.XUnitTest 项目使用了托管测试主机的方式运行单元测试,默认的测试结果文件是 .trx 格式,在 jenkins 上执行发送测试报告的时候, jenkins 将无法解析,为了使用测试结果文件,我们还必须引用另外一个 nuget 包:XunitXml.TestLogger,该组件赋予我们将 dotnet test 的结果文件转换为 xUnitXml 文件的能力。
控制台输出结果如下:
一共有12项测试,其中全部通过。本地测试已经通过。接下来我们就开始使用 jenkins 构建 .NET Core 程序。
jenkins配置邮件通知
为了实现发送测试报告的功能,我们需要在 jenkins 中配置邮件服务器,点击 Manage Jenkins -> Configure System -> Email notification
配置系统管理员邮件地址
配置 Smtp 服务器
创建第一个 CI/CD 项目
创建任务
点击 “开始创建一个新任务”,输入任务名称,选择自由风格的项目,点击确定,然后马上就进入了任务详细配置的界面。
源码管理,选择 git
由于我的测试项目托管在 GitHub 上,所以我填入 GitHub 的项目地址:https://github.com/lianggx/RonTest.git,身份验证,我选择添加一个认证信息。
编写构建脚本
接下来,直接拉到底部,在构建选项这里选择“增加构建步骤”,选择 “执行 shell”。输入构建脚本。
echo '==============准备开始构建=================='
pwd
cd src/Ron.Blogs
sudo dotnet restore
sudo dotnet build
sudo dotnet publish --framework netcoreapp2.2 -o /data/sites/RonTest
echo '==============构建完成=================='
编写测试脚本
再次增加一个构建步骤,“执行 shell”。输入脚本
sudo dotnet test test/Ron.XUnitTest/Ron.XUnitTest.csproj --logger:"xunit;LogFileName=TestResult.xml"
这里有一个细节,就是在执行命令的时候带了一个参数 --logger:"xunit;LogFileName=TestResult.xml",表示输出测试结果为 xunit 格式的 xml 文件,该文件将在下面的测试报告环节使用。
演示到了这里,有点走不下去,因为我们要解析测试报告,但是这个时候我们需要去安装一个插件,否则无法解析
安装 jenkins 必须插件
返回 jenkins 首页,依次点击 Manage Jenkins -> Manage Plugins -> Available(可选插件),搜索 TestComplete xUnit ,勾选,选择直接安装即可。
发送测试报告配置
安装完成后,再次进入任务配置页,添加构建后操作,选择:Publish xUnit test result report,Report Type 选择 xUnit.NET-v2(default),Pattern 输入测试报告生成的路径:
test/Ron.XUnitTest/TestResults/TestResults.xml
配置邮件接收人
继续添加构建后操作步骤 E-mail notification
保存配置,立即构建!
构建成功,获得报表
收到邮件通知
一个小细节
由于我是从安装 CentOS 开始做起,在开始构建的时候还有一个错误,就是报:sudo: no tty present and no askpass program specified,如果有碰到的同学,请勿惊慌,编辑下面的文件可解决问题
vi /etc/sudoers
// 定位到文件末尾,增加两个用户的配置,保存即可
jenkins ALL = NOPASSWD:ALL
tomcat ALL = NOPASSWD:ALL
结束语
本文详细介绍了从零开始,如何利用 jenkins 对 .NET Core 项目进行 CI/CD 下的集成自动化测试,对于即将开展或者已经开展 CI/CD 化的项目具有一定的参考意义,篇幅较长,由于篇幅较长,难免有所疏漏,欢迎指正。
文章参考:https://www.cnblogs.com/ieinstein/p/7096650.html
中国.NET开发者峰会2019上海站
作为《中国.NET开发者峰会2019上海站》的演讲嘉宾,我分享的主题《建立TDD的高效开发模型》,里面会提到本文的内容,由于本文篇幅较长,所以先放本节内容,在会上我也会做详细的介绍,欢迎大家到上海现场交流。进入现场的方式请访问下方的二维码,获取大会行程介绍,也请扫描下方的二维码获取。
大会信息
2019年11月9日 09:00-18:00
大会地址:(上海杨浦)佳木斯路777号上海中谷小南国花园酒店
门票优惠:每张门票299, 购买团体票(大于10张)享受整单8折优惠,请通过邮箱联系主办方 dotnet@dotnetconf.cn
报名方式
活动行:https://www.huodongxing.com/event/4514005355700
百格活动:https://www.bagevent.com/event/6069892
演讲嘉宾介绍
.NETCore下CI/CD之自动化测试的更多相关文章
- 微服务架构下 CI/CD 如何落地
本文系云原生应用最佳实践杭州站活动演讲稿整理.杭州站活动邀请了 Apache APISIX 项目 VP 温铭.又拍云平台开发部高级工程师莫红波.蚂蚁金服技术专家王发康.有赞中间件开发工程师张超,分享云 ...
- 企业DevOps研发模式下CI/CD实践详解指南
阅读全文大概需要 10分钟. 1. 前言 借着公司今年新组建的中台研发部东风,我作为其中的主要负责人,在研发中心主导推行DevOps研发管理模式转变及质量管理创新建设,本篇文章摘取自今年9月底,笔者在 ...
- .NetCore 配合 Gitlab CI&CD 实践 - 单体项目
前言 上一篇博文 .NetCore 配合 Gitlab CI&CD 实践 - 开篇,主要简单的介绍了一下 GitLab CI 的持续集成以及持续部署,这篇将通过 GitLab CI 发布一个 ...
- CI Weekly #1 | 这份周刊,带你了解 CI/CD 、DevOps、自动化测试
原文首次发布与 flow.ci Blog >> 链接,转载请联系:) 准备了很久,CI Weekly 第一期终于来了. CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分 ...
- .NetCore 配合 Gitlab CI&CD 实践 - 开篇
引言 这是一个系列的文章,讲述的是一个中小型开发团队如何从零开始使用搭建基建 GitLab 代码托管平台,以及使用 GitLab Runner 实现 CI/CD 的故事.本系列通过部署一个完整的 .n ...
- Azure 实践(4)- CI/CD .netcore项目Docker构建及部署
上篇已介绍了.netcore项目构建的相关步骤,本篇继续完善 1.什么是CI/CD CI/CD 中的"CI"始终指持续集成,它属于开发人员的自动化流程.成功的 CI 意味着应用代码 ...
- docker | jenkins 实现自动化CI/CD,后端躺着把运维的钱挣了!(下)
前言 在上一篇文章中,我们使用docker编写Dockerfile文件,将我们自己的项目构建成镜像,然后发布到Docker Hub中,并且用自己的云服务器拉取Docker Hub上我们自己上传的项目镜 ...
- 群晖下 gitea+drone+harbor实现CI/CD 发布到云服务器
常用命令 sudo -i然后输入密码登录root账户(群晖默认只能使用admin账号登陆) vim xxx编辑(编辑是进去之后按i,退出并保存是按esc,然后:wq!再回车) mkdir xx创建文件 ...
- 好代码是管出来的——使用GitHub实现简单的CI/CD
软件开发一般来说是一项团队作业,在本系列文章开始就提到过软件的编码是由一个团队“并行”完成的,为了保证编码任务正常完成,首先引入版本控制工具来完成代码管理,为了保证代码质量引入了代码分析器以及代码测试 ...
随机推荐
- [Linux][函数]flock函数的用法
表头文件 #include<sys/file.h> 定义函数 int flock(int fd,int operation); 函数说明 flock()会依参数operation所指 ...
- 第八届蓝桥杯java b组第三题
标题:承压计算 X星球的高科技实验室中整齐地堆放着某批珍贵金属原料. 每块金属原料的外形.尺寸完全一致,但重量不同.金属材料被严格地堆放成金字塔形. 7 ...
- spring5 源码深度解析----- AOP的使用及AOP自定义标签
我们知道在面向对象OOP编程存在一些弊端,当需要为多个不具有继承关系的对象引入同一个公共行为时,例如日志,安全检测等,我们只有在每个对象里引入公共行为,这样程序中就产生了大量的重复代码,所以有了面向对 ...
- Hbase入门(三)——数据模型
Hbase最核心但也是最难理解的就是数据模型,由于与传统的关系型数据库不同,虽然Hbase也有表(Table),也有行(Row)和列(Column),但是与关系型数据库不同的是Hbase有一个列族(C ...
- JVM 调优 - jstat
Java命令学习系列(四)——jstat 2015-07-31 分类:Java 阅读(11041) 评论(1) 阿里大牛珍藏架构资料,点击链接免费获取 jstat(JVM Statistics Mon ...
- 设计模式——统一建模语言UML
目录 一.UML的结构 1.1视图 1.2图 1.3模型元素 二.类图 2.1类与类图 2.2类之间的关系 三.序列图 3.1序列图定义 3.2序列图组成元素与绘制 四.状态图 4.1状态图定义 4. ...
- 踩坑踩坑之Flask+ uWSGI + Tensorflow的Web服务部署
一.简介 作为算法开发人员,在算法模块完成后,拟部署Web服务以对外提供服务,从而将算法模型落地应用.本文针对首次基于Flask + uWSGI + Tensorflow + Nginx部署Web服务 ...
- python程序设计基础(嵩天)第五章课后习题部分答案
第五章p1515.2:实现isodd()函数,参数为整数,如果参数为奇数,返回true,否则返回false.def isodd(s): x=eval(s) if(x%2==0): return Fal ...
- spring5 源码深度解析----- 事务的回滚和提交(100%理解事务)
上一篇文章讲解了获取事务,并且通过获取的connection设置只读.隔离级别等,这篇文章讲解剩下的事务的回滚和提交 回滚处理 之前已经完成了目标方法运行前的事务准备工作,而这些准备工作最大的目的无非 ...
- github基本使用---从零开始
1.使用之前首先得有账号(附链接):https://github.com/ 2.注册帐号之后得有方便上传项目的工具git bash下载安装 https://gitforwindows.org/ 3.启 ...