zoukankan      html  css  js  c++  java
  • .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

    演讲嘉宾介绍

  • 相关阅读:
    关于Maya Viewport 2.0 API 开发的介绍视频
    春节大假
    Some tips about the life cycle of Maya thread pool
    Can I compile and run Dx11Shader for Maya 2015 on my side?
    How to get current deformed vertex positions in MoBu?
    想加入全球首届的 欧特克云加速计划吗?
    三本毕业(非科班),四次阿里巴巴面试,终拿 offer(大厂面经)
    mac、window版编辑器 webstorm 2016... 永久破解方法。
    node 搭载本地代理,处理web本地开发跨域问题
    js 一维数组,转成嵌套数组
  • 原文地址:https://www.cnblogs.com/viter/p/11761853.html
Copyright © 2011-2022 走看看