【问题标题】:Allure report is showing empty contents after Jenkins job executionJenkins 作业执行后,Allure 报告显示内容为空
【发布时间】:2021-12-29 20:11:42
【问题描述】:

我有一个 Jenkins 工作“FEXT_21.4_AUTOMATION”,即在 docker 中执行一些 selenium 测试用例,而 post 工作的一项工作是生成诱惑报告。但不知何故,报告总是 0 个结果!

下图是我的工作配置。

你可能会发现,我有这个命令让测试用例在 docker 中执行。

docker-compose -f docker-compose.yml run --rm -v ${ROOT}/allure-reports:/allure-reports fext_extender behave ...

由于所有权“root”的输出文件,我有第二个命令来解决更改整个/allure-reports所有权。

docker run --rm -i --entrypoint /bin/sh -e HOST_UID=`id -u` -v ${ROOT}/allure-reports:/allure-reports alpine:latest -c 'chown -R ${HOST_UID}:${HOST_UID} /allure-reports/' 

从一个作业执行的控制台,我可以看到一切都顺利进行,并且诱惑报告生成

...
1 feature passed, 0 failed, 0 skipped
1 scenario passed, 0 failed, 0 skipped
8 steps passed, 0 failed, 0 skipped, 0 undefined
Took 1m2.060s
+ id -u
+ docker run --rm -i --entrypoint /bin/sh -e HOST_UID=111 -v /var/lib/jenkins/workspace/FEXT_21.4_AUTOMATION/allure-reports:/allure-reports alpine:latest -c chown -R ${HOST_UID}:${HOST_UID} /allure-reports/
+ set -e
[FEXT_21.4_AUTOMATION] $ /usr/share/allure/bin/allure generate /var/lib/jenkins/workspace/FEXT_21.4_AUTOMATION/allure-reports -c -o /var/lib/jenkins/workspace/FEXT_21.4_AUTOMATION/allure-report
Report successfully generated to /var/lib/jenkins/workspace/FEXT_21.4_AUTOMATION/allure-report
Allure report was successfully generated.
Creating artifact for the build.
Artifact was added to the build.
Finished: SUCCESS

但不知何故,如果我点击诱惑链接,我只能看到一个 0-testcase 结果。

在持有 Jenkins 任务的平台上,当调用 allure generate 命令时,我可以看到在“allure-reports”下创建的这两个额外文件。

jenkins@Jenkins-CJI:~/workspace/FEXT_21.4_AUTOMATION/allure-reports$ pwd
/var/lib/jenkins/workspace/FEXT_21.4_AUTOMATION/allure-reports
jenkins@Jenkins-CJI:~/workspace/FEXT_21.4_AUTOMATION/allure-reports$ whoami
jenkins
jenkins@Jenkins-CJI:~/workspace/FEXT_21.4_AUTOMATION/allure-reports$ ls -ltr | tail -5
-rw-r--r-- 1 jenkins messagebus  78515 Nov 18 15:29 Screenshot_2021-11-18T18:29:25.491659_1637278165.4916792.png
-rw-r--r-- 1 jenkins messagebus 134025 Nov 18 15:29 Screenshot_2021-11-18T18:29:26.011988_1637278166.0120175.png
-rw-r--r-- 1 jenkins messagebus 134025 Nov 18 15:29 Screenshot_2021-11-18T18:29:26.384782_1637278166.3848066.png
-rw-r--r-- 1 jenkins messagebus     78 Nov 18 15:29 testrun.json
-rw-r--r-- 1 jenkins messagebus    295 Nov 18 15:29 executor.json

这是魅力报告的样子:

jenkins@Jenkins-CJI:~/workspace/FEXT_21.4_AUTOMATION$ tree -L 2 allure-report
allure-report
├── app.js
├── data
│   ├── attachments
│   ├── behaviors.csv
│   ├── behaviors.json
│   ├── categories.csv
│   ├── categories.json
│   ├── packages.json
│   ├── suites.csv
│   ├── suites.json
│   ├── test-cases
│   └── timeline.json
├── export
│   ├── influxDbData.txt
│   ├── mail.html
│   └── prometheusData.txt
├── favicon.ico
├── history
│   ├── categories-trend.json
│   ├── duration-trend.json
│   ├── history.json
│   ├── history-trend.json
│   └── retry-trend.json
├── index.html
├── plugins
│   ├── behaviors
│   ├── junit
│   ├── packages
│   ├── screen-diff
│   ├── trx
│   ├── xctest
│   └── xunit-xml
├── styles.css
└── widgets
    ├── behaviors.json
    ├── categories.json
    ├── categories-trend.json
    ├── duration.json
    ├── duration-trend.json
    ├── environment.json
    ├── executors.json
    ├── history-trend.json
    ├── launch.json
    ├── retry-trend.json
    ├── severity.json
    ├── status-chart.json
    ├── suites.json
    └── summary.json

有人知道为什么诱惑报告是空的吗?

感谢您的帮助。

杰克

【问题讨论】:

    标签: docker jenkins jenkins-plugins allure


    【解决方案1】:

    使用${WORKSPACE} 代替${ROOT}。 WORKSPACE 是一个包含 WORKSPACE PATH 的 Jenkins 变量

    -v ${WORKSPACE}/allure-reports:/allure-reports

    另外,在运行作业后检查 Jenkins 工作空间内的 /allure-results 目录中是否有一些 alure 结果文件:

    如果您在工作区中没有看到任何结果文件,那是因为您没有在容器中挂载正确的内部目录,在本例中为 /allure-reports(在容器内)

    【讨论】:

    • 我刚刚使用了默认的 "${WORKSPACE}" 值来重新执行我的工作。但由于默认的 ${WORKSPACE} 和我自定义的“${ROOT}”指向同一个位置,我看不出最终报告有什么不同。在任何一种情况下,在我的 selenium docker 被执行之后,我看到了在 /allure-reports 目录下创建的 PNG 文件列表,并且在执行 allure generate 之后,我看到了在该目录下生成的这两个额外的 json 文件:“ executor.json”和“testrun.json”。
    • 感谢您的帮助。 1)我不知道有一个 ${WORKSPACE},默认情况下,它指向这个 Jenkins Job 的根。因此,只需将其更换并尝试一下。但是由于我自定义的 ${ROOT} 值和 ${WORKSPACE} 都指向同一个位置,所以运行结果和我之前的设置一样。 2)执行后,我看到了在 ${WorkSpace}/all-reports/.. 下创建的 png 文件列表,但我没有这个“allure-results”目录,3)在我的 Jenkins 服务上,它几年前在 UBUNTU 机器上设置的,我没有看到这个“工作区”链接?
    • 检查您的框架将这些结果文件放在哪里,最好的方法是使用您的相对(项目根目录)并将文件夹 allure-results 放在那里。输入工作时会出现工作区链接。如果它是一个管道作业,那么您必须输入内部版本号,在那里您将看到工作区链接
    【解决方案2】:

    这些是我在 junkins 工作中创建成功诱惑报告的最后命令。

    docker-compose -f docker-compose.yml run --rm -v ${WORKSPACE}/allure-reports:/allure-reports fext_extender behave -verbose -f allure_behave.formatter:AllureFormatter -f pretty -o /allure-reports <feature_files>
    
    docker run --rm -i --entrypoint /bin/sh -e HOST_UID=`id -u` -v ${WORKSPACE}/allure-reports:/allure-reports alpine:latest -c 'chown -R ${HOST_UID}:${HOST_UID} /allure-reports/' 
    

    评论:

    • 正如弗兰克在这里提到的,https://gitter.im/allure-docker-service/community?at=5f2987858d82e662520511be,需要挂载一个卷,就像 "${WORKSPACE}/allure-reports:/allure-reports"。
    • docker 执行输出文件的所有权是“root”,需要想办法将 ${WORKSPACE}/allure-reports 的所有权更改为“Jenkins”。否则后续 allure generate 运行会失败,因为 /allure-reports 内部没有权限。
    • 在我的第一个命令中,我使用的是“... -o ./allure-reports”,它与“... -o /allure-reports”的位置不同。正因为如此,“...-result.json”文件列表在第一次命令执行后没有生成!

    在我纠正了这 3 个区域之后,我最终得到了 Jenkins 结果。

    【讨论】:

    • 对于第二点,您必须将 jenkins 用户作为参数传递。您可以让 jenkins 用户执行 echo "$(id -u):$(id -g)" 。如果要传递用户可以这样docker-compose run -u "$(id -u):$(id -g)" ...
    • 那会很干净。但我刚刚尝试过这样的步骤:删除整个 /allure-reports 目录 => 尝试使用额外用户选项尝试新命令,但它失败了。发生的情况是,创建了一个新的 /allure-reports ,其所有者仍然是“root”,我的命令正试图将所有者“Jenkins”的 PNG 文件转储到其中。和许可被拒绝。我不明白的是,为什么 /allure-reports 仍然是“根”?
    • 我建议您不要删除allure-results 目录,只需删除该目录的内容即可。这样,只有您会使用 jenkins 用户创建文件。您可以使用选项--report-path 选择容器内/allure-reports 目录的目录路径(如果您使用的是 allure 命令行)
    • 感谢您的提示。我已经按照您的建议进行了尝试,并且一切都在一个命令中完成。又好又干净。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    相关资源
    最近更新 更多