django - Jenkins JUnit 插件给出错误“错误:未找到测试报告文件。配置错误?”
问题描述
我有 Jenkins 主容器在 Kubernetes 集群中运行。我有一个单独的 VM 配置为构建从属,以便它可以构建容器。
我Multibranch Pipeline
在 git repo 中使用 Jenkinsfile 。
该管道构建 Docker 映像,这是一个 Django 应用程序。我已经安装了 django_nose,所以它可以生成带有测试结果的 xunit 文件。
Django 设置具有以下选项来启用 xunit 测试结果。
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
NOSE_ARGS = [
'--with-xunit',
'--xunit-file=/tmp/tests/results/results.xml',
]
在管道中,我有以下阶段:
stage("Test") {
sh("docker run --rm -i \
-v '${env.WORKSPACE}/tests/results/':/tmp/tests/results \
${image} python3 manage.py test")
junit '${env.WORKSPACE}/tests/results/*.xml'
}
它将 Jenkins 工作空间中的一个目录挂载为容器中的一个卷,以便在容器完成后 Jenkins 可以查看保存的测试结果。
当我运行构建时,我收到以下错误:
[Pipeline] { (Test)
[Pipeline] sh
[my_project-test-7T6G6Z...QQBYGFA] Running shell script
+ docker run --rm -i -v /home/jenkins/jenkins_home/workspace/my_project-test-7T6G6Z...QQBYGFA/tests/results/:/tmp/tests/results my-registry/username/my_project python3 manage.py test
nosetests --with-xunit --xunit-file=/tmp/tests/results/results.xml --verbosity=1
Creating test database for alias 'default'...
............
----------------------------------------------------------------------
Ran 12 tests in 1.421s
OK
Destroying test database for alias 'default'...
[Pipeline] junit
Recording test results
No test report files were found. Configuration error?
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
我可以看到 Django 测试正在运行并通过。如果我查看 Jenkins 从属 VM,我可以看到 results.xml 文件位于它应该在的位置,并且它包含测试的 XML 结果。
jenkins@jenkins-slave01:~/jenkins_home/workspace$ ls -al /home/jenkins/jenkins_home/workspace/my_project-test-7T6G6Z...QQBYGFA/tests/results/results.xml
-rw-r--r-- 1 root root 1329 Oct 2 09:45 /home/jenkins/jenkins_home/workspace/my_project-test-7T6G6Z...QQBYGFA/tests/results/results.xml
jenkins@jenkins-slave01:~/jenkins_home/workspace$
为什么 Jenkins 无法获得测试结果,因为我可以看到文件已创建?
解决方案
我想出了答案。JUnit 需要工作空间内的相对路径。您不需要包含工作区的路径。
junit 'tests/results/*.xml'
推荐阅读
- node.js - 如何保护在不同服务器下运行的另一个应用程序中使用的 Nodejs / express API
- laravel - 当 Vue.js 的购物车中已经存在产品 ID 时,我想在每次点击时设置本地存储和数量增量
- asp.net - 我的操作方法返回 {"success=true,message="work done"} ASP.net MVC 5
- android - 如何在卡片视图中将卡片变灰?
- javascript - 我将如何使用 .addField 循环遍历数组
- arrays - 替代 QUERY 嵌套在 COUNTIF 中,用于 Google 表格中的列数组
- protractor - 无法使用非角度网页的量角器在 iframe 内定位元素
- python - 我应该如何覆盖 python 中 __init__ 方法的默认值?
- github - TRN-Pytorch 模型 - RuntimeError: Dimension out of range (expected to be in range of [-1, 0], but got 1)
- ios - 具有多个部分数据问题的双向滚动collectionView