为了呼应《中国.NET开发者峰会2019上海站》,做为演讲嘉宾,我但愿和各位同行创建更多的互动,为此,我特意将部分演讲内容,整理成文章先行发布。本文从零开始,一步一步的引导,从安装JDK/Tomcat/jenkins 到创建第一个 CI/CD 项目,确保按照本文指引,能快速的在 CentOS 下,将 .NET Core 经过 jenkins 进行持续集成/持续部署,经过 jenkins,实现集成测试自动化,最终达到,快速构建项目,执行单元测试,生成测试报告,发送测试报告等工做,让测试工做伴随着 CI/CD 的持续进行而不断的对输出进行测试和校订,真正实现让本地单元测试在 CI/CD 中发挥其巨大的威力。html
大会详情介绍请看文章末尾介绍。java
首先安装Java环境,在Centos7上,搜索仓库内的包包linux
yum search java | grep --color OpenJDK
能够看到一堆颜色鲜艳的Java包包,接下来执行安装openjdkgit
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
安装完成后,执行命令github
java -version # 输出 OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode) 表示安装成功
安装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/,执行解压命令,而后删除压缩包web
tar -zxf apache-tomcat-9.0.27.tar.gz tomcat rm -f apache-tomcat-9.0.27.tar.gz
实际上,按照通常状况下,直接执行下面的命令能够直接运行 Tomcatshell
/usr/local/tomcat/bin/startup.sh
可是做为测试要尽可能贴近实际环境的极客追求来讲,咱们要把 Tomcat 做为系统服务,在系统开关机的时候随系统启动,那么就须要多作点小工做,不须要担忧,下面的工做一共就花了2分钟左右apache
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" // 保存,退出编辑
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
mkdir /opt/.jenkins chown -R tomcat:tomcat /opt/.jenkins
进入目录 cd /usr/lib/systemd/system,执行 ls -l,能够看到不少服务文件,而后咱们直接执行下面的命令新建并编辑文件 tomcat.service编程
vi 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 // 保存,退出
systemctl enable tomcat.service systemctl start tomcat.service system status tomcat.service
若是以上的命令没有报错,那么恭喜你,你已经成功部署了 Tomcat 服务,接下来就是部署 jenkins 到 Tomcatcentos
下载 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 初始化完成,可选择安装推荐的插件
请耐心等待插件安装完成....
相信来到这个环节,你们都松了一口气,毕竟安装 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,输出版本号即为安装成功
一个相对标准的解决方案结构以下,解决方案中必须包含 src/test 两个基础项目,表示该项目有单元测试,没有单元测试的项目是不完整的,这应当成为一种良好的编程规范。项目创建完成,咱们本地执行单元测试看看结果。
dotnet test
其中,Ron.XUnitTest 项目使用了托管测试主机的方式运行单元测试,默认的测试结果文件是 .trx 格式,在 jenkins 上执行发送测试报告的时候, jenkins 将没法解析,为了使用测试结果文件,咱们还必须引用另一个 nuget 包:XunitXml.TestLogger,该组件赋予咱们将 dotnet test 的结果文件转换为 xUnitXml 文件的能力。
控制台输出结果以下:
一共有12项测试,其中所有经过。本地测试已经经过。接下来咱们就开始使用 jenkins 构建 .NET Core 程序。
为了实现发送测试报告的功能,咱们须要在 jenkins 中配置邮件服务器,点击 Manage Jenkins -> Configure System -> Email notification
点击 “开始建立一个新任务”,输入任务名称,选择自由风格的项目,点击肯定,而后立刻就进入了任务详细配置的界面。
因为个人测试项目托管在 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 首页,依次点击 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上海站》的演讲嘉宾,我分享的主题《创建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