【Jenkins-配置】在win节点下运行后,HtmlReport乱码解决方案

概述

项目中做了一套接口自动化测试并部署到jenkins上,过程中遇到了很多问题,但最终全部得到了解决。主要涉及多节点参数化构建报告不显示css样式报告乱码
本次我的环境信息如下:

  1. linux:jenkins服务器
  2. win:jenkins的一个节点

一、添加节点

位置:系统管理>节点管理>添加节点
配置详情如下:

在这里插入图片描述
注意事项:

  1. 启动方式有很多种,这里我选择的ssh,所以要保证该机器上启动了ssh服务
    在这里插入图片描述
  2. 因为我的项目是java工程,需要jdk,所以设置了jdk目录,顺便也设置了git目录
    在这里插入图片描述
  3. 节点启动后,会在远程工作目录中产生对应的文件
    在这里插入图片描述
    在这里插入图片描述

二、参数化构建

因为我这很多项目跑的都是同一套自动化代码,仅仅是用例不相同。所以可以利用maven的profile配置多个环境来实现。
现在我有三个项目,对应了三个配置文件
在这里插入图片描述

主配置文件:
spring:
  profiles:
    active: @spring.active@
pom.xml配置
  <profiles>
        <profile>
            <id>api</id>
            <properties>
                <spring.active>api</spring.active>
            </properties>
        </profile>
        <profile>
            <id>saas</id>
            <properties>
                <spring.active>saas</spring.active>
            </properties>
        </profile>
        <profile>
            <id>temp</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <spring.active>temp</spring.active>
            </properties>
        </profile>
    </profiles>

上述配置代表弄了三个环境,默认使用的配置文件为application-temp.yml;
如果想在maven打包的时候指定使用temp项目的配置文件,那么使用以下命令即可:

maven clean package -Ptemp

备注

如果项目打包还想要将本地jar一起打包,在build可以加入以下配置

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.21.0</version>
                <configuration>
                    <suiteXmlFiles>
                        <suiteXmlFile>src/main/resources/testng.xml</suiteXmlFile>
                    </suiteXmlFiles>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <!--根据你把lib放的位置-->
                    <compilerArguments>
                        <extdirs>${project.basedir}/src/main/resources/lib</extdirs>
                    </compilerArguments>
                </configuration>
            </plugin>
        </plugins>
    </build>
jenkins设置参数化构建

General页签:

  1. 取名为env就代表,后续构建过程中可以通过%env%来引用该变量(linux需要使用${env}引用)
    在这里插入图片描述

  2. 构建步骤中引用该参数
    在这里插入图片描述

  3. 执行构建时,可用选择使用哪个项目的配置
    在这里插入图片描述

三、HTML报告不显示css样式

在构建后操作中使用Publish HTML reports插件,即可展示报告
在这里插入图片描述
tips:如果每次构建想要保存结果,就需要勾上上述两个选项;否则只保留最后一次结果。

可能不会展示css样式

临时解决方案:
在系统设置>脚本命令行中输入:

每次重启后失效
System.setProperty(“hudson.model.DirectoryBrowserSupport.CSP”, “”)

四、报告显示中文乱码

在这里插入图片描述
通过检查发现,win这边产生的报告文件编码格式为:GBK在这里插入图片描述
然而,linux上的jenkins上的编码格式为UTF-8,所以需要两边格式保持一致。
尝试过修改监听器中的编码,但是这个似乎只能影响HTML中的meta中的charset属性,整个文件的编码还是gbk的
在这里插入图片描述
我不想对jenkins做任何修改(因为我感觉utf-8就已经是一个靠谱的编码了),那么现在就是要让我本地的html报告的文件编码变成utf8(但是在我本身代码层面,我没有找到合适的方法)

以下命令或许有些帮助:

linux查看文件编码: file index.html
linux修改文件编码: 将index.html 文件编码从gbk修改为utf-8
iconv -f GBK -t UTF-8 -o index2.html index.html
win查看文件编码: 使用notepad++等工具即可看到编码
win修改文件编码(cmd): 将index.html的编码修改为utf8,修改后的文件保存为index2.html
PowerShell -Command “& {get-content index.html -encoding default| set-content index2.html -encoding utf8}”

我猜想,jenkins在远程构建脚本的过程是:构建前脚本>构建脚本>构建后脚本>publish HTML report。所以当构建命令执行完成后,会在我远程机器上产生报告,然后再publish html report阶段会将该报告直接拷贝到jenkisn服务器上的某次build中。如果我想在“构建后脚本”这个阶段修改报告的编码,显然是不行的,因为那个时候报告都还没有开始拷贝呢,怎么修改?那么还能在publish HTML report后修改嘛?我似乎没有找到相关功能,除非你在构建后触发另外一个构建项目来专门修改该文件的编码。

最终我的解决方案是:在远程机器构建完成后,就修改其编码格式为UTF-8,然后再拷贝到jenkins服务器
所以我的构建命令可能会是这样:

cd /D D:\yangqin\coding\sw-sdrp-interfaceAuto\sdrpAutotest
mvnw clean package -P%env%
PowerShell -Command “& {get-content> test-output\index.html -encoding default| set-content> test-output\report.html -encoding utf8}”

此时遇到的另外一个问题是,如果我的测试用例中含有失败的情况,那么PowerShell后面的命令根本不会执行。如果在linux上遇到这种情况,通常的解决方案是:

此时无论command执行成功还是失败,后面的命令都照样运行
command || true

由此启发,在win上应该这样:

此时无论command1执行成功还是失败,command2命令都照样运行
command1 || command2

所以我最后的构建命令长这样:
在这里插入图片描述

结果:乱码问题得到解决

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值