You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Jenkins:当Cypress测试用例失败时触发构建失败?

问题

我在Jenkins的一个阶段中通过Docker容器运行Cypress测试,当前阶段配置代码如下:

stage('Run E2E tests') {
 steps {
    withCredentials([
      sshUserPrivateKey(credentialsId: '*********', keyFileVariable: 'SSH_KEY_FILE', usernameVariable: 'SSH_USER')
     ]) {
    sh """
        eval `ssh-agent -s`
        ssh-add ${SSH_KEY_FILE}
        ~/earthly \\
          --no-cache \\
          --config=.earthly/config.yaml \\
          +e2e
        eval `ssh-agent -k`
      """
    }
  } 
}

同时通过publishHTML发布测试报告,配置代码如下:

post {
    always {
      echo "-- Archive report artifacts"
      archiveArtifacts artifacts: 'results', allowEmptyArchive: 'true'
      echo "-- Publish HTLM test result report"
      publishHTML (target: [
            allowMissing: false,
            alwaysLinkToLastBuild: false,
            keepAll: true,
            reportDir: 'results/html/',
            reportFiles: 'mochawesome-bundle.html',
            reportName: "Test Result Report"
          ])
    }
  }

我需要实现当Cypress的Mocha报告中有任意测试用例(TC)失败时,让Jenkins构建失败,请问有什么解决方案?

解决方案

下面几种方案可以实现需求:

方案一:让Earthly的+e2e目标返回非零退出码

Jenkins的sh步骤默认会根据命令的退出码判断是否失败,只要Earthly执行Cypress测试后,在测试失败时返回非零退出码,Jenkins就会自动终止构建并标记失败。

检查你的Earthly +e2e目标配置,确保:

  • Cypress测试命令失败时返回非零值(Cypress默认行为就是这样)
  • Earthly没有用RUN --ignore-failure执行测试命令,否则会忽略测试失败的退出码

如果当前Earthly目标已经满足上述条件,那你的现有Jenkins配置不需要额外修改——只要+e2e执行失败,sh步骤就会失败,进而让整个构建失败。

方案二:解析Mocha JSON报告手动判断失败用例

如果Earthly的退出码无法直接反映测试结果(比如有自定义逻辑覆盖了退出码),可以先配置Cypress生成JSON格式的报告,然后在Jenkins中解析报告,统计失败用例数量,手动触发构建失败。

具体步骤:

  1. 修改Cypress配置(cypress.config.js),生成JSON报告:
module.exports = defineConfig({
  e2e: {
    reporter: 'mochawesome',
    reporterOptions: {
      reportDir: 'results/json',
      overwrite: false,
      html: false,
      json: true
    }
  }
});
  1. 在Jenkins的测试阶段添加解析脚本,比如用jq工具(需要Jenkins节点提前安装):
    在现有sh块的末尾添加:
# 解析Mocha JSON报告,统计失败用例数
FAIL_COUNT=$(jq '.stats.failures' results/json/mochawesome.json)
if [ "$FAIL_COUNT" -gt 0 ]; then
  echo "发现$FAIL_COUNT个失败测试用例,构建终止"
  exit 1
fi

方案三:使用Jenkins Mocha测试结果插件

安装Jenkins的Mocha Test Result Plugin,该插件可以直接解析Mocha的JSON报告,自动根据测试结果标记构建状态。

配置步骤:

  1. 先按方案二的第一步配置Cypress生成Mocha JSON报告
  2. 在Jenkins的post阶段添加插件解析步骤,保留原有的归档和HTML发布逻辑:
post {
    always {
      echo "-- Archive report artifacts"
      archiveArtifacts artifacts: 'results', allowEmptyArchive: 'true'
      echo "-- Publish HTLM test result report"
      publishHTML (target: [
            allowMissing: false,
            alwaysLinkToLastBuild: false,
            keepAll: true,
            reportDir: 'results/html/',
            reportFiles: 'mochawesome-bundle.html',
            reportName: "Test Result Report"
          ])
      // 添加Mocha插件解析步骤
      mocha testResultsPattern: 'results/json/mochawesome.json'
    }
  }

插件会自动识别报告中的失败用例,一旦有失败就会把构建标记为失败状态。

内容的提问来源于stack exchange,提问作者Deepak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:26:16