我有一个在 Dockerfiles 中进行构建、测试和部署过程的项目,我想对其应用 jenkins 管道。我想让詹金斯部分尽可能简单、苗条和不可知。可以为 jenkins 安装其他插件。可以修改 dockerfiles。
例如考虑这个 Jenkinsfile
pipeline {
agent { label 'my_agent' }
stages {
stage("TestInDocker") {
steps {
sh "docker build --target tester -t my_tester ."
sh "docker run -v $PWD/coverage:/workdir/coverage my_tester"
}
}
}
post {
always {
sh "ls -la $PWD/coverage/junit"
junit '$PWD/coverage/junit/*.xml'
}
}
}
在此示例中,后块创建以下输出
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] sh
+ ls -la /srv/jenkins/coverage/junit
total 360
drwxr-xr-x 2 root root 4096 Jul 22 11:56 .
drwxr-xr-x 5 root root 4096 Jul 22 11:56 ..
-rw-r--r-- 1 root root 357595 Jul 22 15:23 TESTS-HeadlessChrome_73.0.3683_(Linux_0.0.0).xml
[Pipeline] junit
Recording test results
No test report files were found. Configuration error?
Error when executing always post condition:
Also: [... java stack trace from junit ...]
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE
在此示例中,似乎创建了所需的文件,但 junit-plugin 似乎找不到它。我将如何修改此示例以便 junit-plugin 可以找到测试报告文件?
附加说明/背景:
- 输出似乎创建成功,但它们属于 root 而不是 jenkins 用户。难道这就是junit看不到他们的原因吗?
- 在我的具体情况下,有一些失败的测试,但我不认为它们是问题的根源
- 报告文件是使用 dockercontainer 内的 karma-junit-reporter 创建的
- 我是詹金斯的新手,所以我想我可能在根本上做错了什么
- 我想使用 docker-plugin for jenkins 会起作用,尽管我仍然必须从容器中取出 junit 工件并将其传递给 Jenkins JUnit 插件。欢迎使用 docker-plugin 回答。
- 我在 dockerfile 中的测试是业力/角度测试,需要在跑步者上安装铬。如果事实证明在 docker 中这样做太烦人了,那么我可能会在所有代理上安装 chromium,并为 jenkins 使用 nodejs-plugin。但现在我仍在研究不同的选择