1

我有一个在 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。但现在我仍在研究不同的选择
4

1 回答 1

1

有两个问题:第一个$PWD是指向另一个目录而不是\$PWD. 前者是jenkins PWD,后者指的是这个具体任务的PWD。第二个问题是卷中的文件权限。

我通过\$PWD到处使用解决了第一个问题。

我通过使用另一个 docker 容器来修复卷中的文件权限,“解决”了第二个问题,如下所示:

sh "docker run -v \$PWD/coverage:/data alpine chown -R \$(id -u ${USER}):\$(id -g ${USER}) /data"

我真的不喜欢这个解决方案。

于 2021-09-02T07:39:59.930 回答