记录测试和构建结果

虽然测试是良好的持续交付过程中的关键部分,但大多数人并不希望筛选数千行控制台输出来查找有关失败测试的信息。为了简化操作,只要您的测试运行时可以输出测试结果文件,Jenkins 就可以记录和汇总这些测试结果。Jenkins 通常与 junit 步骤捆绑在一起,但如果您的测试运行结果无法输出 JUnit 样式的 XML 报告,那么还有其他插件可以处理任何广泛使用的测试报告格式。

为了收集我们的测试结果,我们将使用 post 部分。

Jenkinsfile (Declarative Pipeline)

  1. pipeline {
  2. agent any
  3. stages {
  4. stage('Test') {
  5. steps {
  6. sh './gradlew check'
  7. }
  8. }
  9. }
  10. post {
  11. always {
  12. junit 'build/reports/**/*.xml'
  13. }
  14. }
  15. }

Toggle Scripted Pipeline(Advanced)

Jenkinsfile (Scripted Pipeline)

  1. node {
  2. try{
  3. stage('Test') {
  4. sh './gradlew check'
  5. }
  6. finally {
  7. junit 'build/reports/**/*.xml'
  8. }
  9. }

这将会获得测试结果,Jenkins 会持续跟踪并计算测试的趋势和结果。如果存在失败的测试用例,Pipeline 会被标记为 “UNSTABLE”,在网页上用黄色表示,这不同于使用红色表示的 “FAILED” 失败状态。

当出现测试失败时,通常可以从 Jenkins 中获取构建结果报告进行本地分析和测试。Jenkins 内置支持存储构建结果报告,在 Pipeline 执行期间生成记录文件。

通过 archiveArtifacts 步骤和文件匹配表达式可以很容易的完成构建结果记录和存储,如下例所示:

Jenkinsfile (Declarative Pipeline)

  1. pipeline {
  2. agent any
  3. stages {
  4. stage('Build') {
  5. steps {
  6. sh './gradlew build'
  7. }
  8. }
  9. stage('Test') {
  10. steps {
  11. sh './gradlew check'
  12. }
  13. }
  14. }
  15. post {
  16. always {
  17. archiveArtifacts artifacts: 'build/libs/**/*.jar', fingerprint: true
  18. junit 'build/reports/**/*.xml'
  19. }
  20. }
  21. }

Toggle Scripted Pipeline(Advanced)

Jenkinsfile (Scripted Pipeline)

  1. node {
  2. try{
  3. stage('Test') {
  4. sh './gradlew check'
  5. }
  6. finally {
  7. archiveArtifacts artifacts: 'build/libs/**/*.jar', fingerprint: true
  8. junit 'build/reports/**/*.xml'
  9. }
  10. }

如果在 archiveArtifacts 步骤中指定了多个参数,那么每个参数的名称必须在步骤代码中明确指定,即文件的路径、文件名和 fingerprint 三个参数。如果您只需指定文件的路径和文件名,那么你可以省略参数名称 artifacts ,例如:archiveArtifacts 'build/libs/*/.jar'

在 Jenkins 中记录测试和构建结果非常有助于向团队成员快速提供相关信息。在下一节,我们将会展示如何通知团队成员在我们的 Pipeline 中所发生的事情。

继续学习“清理和通知”