我想要做的是Jenkins在Job页面周围的某处显示由Gatling模拟生成的HTML报告 .
我正在使用Declarative Pipeline语法并在docker容器中运行Gatling .
这是代码:
sh '''docker run -i -d --net=host --name gatlingAG ubuntu
docker cp gatling gatlingAG:/
docker exec gatlingAG apt-get -qq update
docker exec gatlingAG apt-get -qq install default-jdk
docker exec gatlingAG /bin/bash -c "./gatling/bin/gatling.sh -m"'''
模拟完成后,结果将在docker容器中的TestResults / [name_of_simulation]文件夹中创建 .
我似乎无法在互联网上找到一种方法来访问该文件夹,并在其中的index.html文件中显示Jenkins中的结果 . 怎么做?
1 回答
首先简单介绍一下使用Docker:
Docker闪耀的地方在于您使用它来构建不可变的基础架构,即容器不会发生变化 . 为此,Docker支持Dockerfile,它允许您通过许多不同的步骤构建容器,例如安装Gatling,并设置默认命令在容器启动时在容器中运行 .
通过使用Dockerfile方法,您可以构建一个用于测试的Gatling容器,这样您就可以免于每次在Jenkins中运行管道时运行
docker exec gatlingAG apt-get -qq update
类型语句 . 只是需要考虑的事情 .现在讨论通过Jenkins管道归档Gatling输出的问题 . 有两种方法可以解决这个问题:
使用
docker cp
将结果从容器中复制回管道的Jenkins工作区将工作空间安装到Gatling容器中,以便将结果直接写入工作空间并轻松存档
1: Using docker cp
您已经使用
docker cp
将内容复制到容器中,因此您可以使用它在Gatling运行后再将内容复制回来 . 你可以这样做:这会将容器文件系统的输出复制到工作区文件系统,您可以将其存档(请参阅答案底部) .
2: Mounting the Jenkins workspace into the container
Docker支持将文件系统从主机安装到在其上运行的任何容器中 . 通过这样做,容器内的进程可以将文件写入更可靠的存储或存储,这比存储容器的寿命更长(一旦销毁容器,其文件系统将永远丢失)
再次,您可以使用管道定义执行类似的操作:
你'll notice that I'm在运行容器时使用
-v
选项告诉Docker将gatling目录挂载到容器中的/ gatling . 这意味着你不需要复制它 . 当Gatling运行时,结果将直接写入你的工作区,这意味着你可以轻松地将它们归档一个Gatling已经完成 . 在再次运行管道之前,可能需要确保从工作区清除任何先前Gatling运行的结果 .Archiving the results
最后,一旦在工作区中输出了Gatling,就可以使用archive Jenkins管道指令将其归档 . 这意味着Jenkins将HTML存储为作业的工件 . 然后,您可以通过浏览器直接访问HTML,例如
https://jenkins-url/job/gatlin-job/1/artifact/TestResults/[name_of_simulation]/index.html