web-dev-qa-db-ja.com

Jenkins JUnitプラグインでエラー「エラー:テストレポートファイルが見つかりませんでした。構成エラーが発生しましたか?」

KubernetesクラスターでJenkinsマスターコンテナーを実行しています。コンテナーをビルドできるように、ビルドスレーブとして構成された別のVMがあります。

GitリポジトリのJenkinsfileでMultibranch Pipelineを使用しています。

パイプラインは、DjangoアプリであるDockerイメージを構築します。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がテスト結果を取得できないのはなぜですか?

3
zoidberg

私は答えを見つけました。 JUnitには、ワークスペース内からの相対パスが必要です。ワークスペースへのパスを含める必要はありません。

junit 'tests/results/*.xml'
8
zoidberg

テスト結果へのパスに先頭のドットがあったため、このエラーが発生しました。例:

junit './build/outputs/androidTest-results/connected/flavors/DEV/*.xml'

理由はわかりませんが、これで修正されました。

junit 'build/outputs/androidTest-results/connected/flavors/DEV/*.xml'
1
Big McLargeHuge