3

在 Jenkins 流水线中,报告导致构建不稳定的 shell 脚本错误的推荐方法是什么(即,执行测试的脚本,但如果进一步失败则不应停止剩余的测试)

理想情况下,如果“测试”脚本失败,我们不会取消构建,而是在最后报告错误。这可以通过使用 catch 块包装“sh”步骤并将构建标记为不稳定来实现。但是,如果我们使用单个管道,所有这些错误日志都将混合在一个控制台日志中(我知道您也可以从管道视图中向下钻取,但需要查找)。

有推荐的方法来报告这些错误吗?想法包括:

  • 将错误保存在数组中并在最后打印
  • 捕获输出并写入junit文件
  • 某种具有记录错误步骤的插件?如果有任何报告,这会将构建标记为不稳定?

例如

def errors = []

try {
    sh "check-doc-style.sh | tee check-doc-style.log"
} catch (e)
    errors << "Doc style check failed : ${e}"
}
step([$class: 'ArtifactArchiver', artifacts: 'check-doc-style.log'])

try {
    sh "sanity-checks.sh | tee sanity-checks.log"
} catch (e)
    errors << "Sanity checks failed : ${e}"
}
step([$class: 'ArtifactArchiver', artifacts: 'sanity-checks.log'])

if (errors.size() > 0) {
    currentBuild.result = 'UNSTABLE'
    for (int i = 0; i < errors.size(); i++) {
        echo errors[i]; 
    }
}

对于上下文:我们正在从每个分支有十几个作业的 Jenkins 设置迁移到单个 Jenkins 管道 Jenkinsfile 来代表整个事情。许多作业都是通过(退出代码 0)或失败的脚本测试。通过查看控制台日志查看错误消息。

4

1 回答 1

1

退出代码处理

由于它正在编写,管道插件不支持退出代码的返回或sh步骤的输出。但是,有一张公开的 可以跟踪此功能。因此try / catch / finally将是处理这种情况的默认方式。

还有其他方法,但这些方法相当麻烦,即。:

  • 忽略 bash 中的非零退出代码,例如。set +e
  • 将输出重定向到外部文件

马文

sh "${mvnHome}/bin/mvn -B -Dmaven.test.failure.ignore verify"
step([$class: 'JUnitResultArchiver', testResults: '**/target/surefire-reports/TEST-*.xml'])

maven.test.failure.ignore即使其中一些失败了,也会运行所有测试。然后JUnitResultArchiver可以将构建状态设置为“不稳定”。

状态报告

  • 在我看来,如果您正在运行测试,那么跟踪结果最有意义的方式就是使用JUnitResultArchiver.

  • 但是,如果另一方面您想收集警告,然后根据重要性更改结果状态,请考虑使用一个阶段,甚至创建一个专用阶段,即。stage "report",最终信息清晰可见。

Jenkins 2.0 包含Stage View 插件,它以清晰的方式呈现 Pipeline 工作流程。

于 2016-04-16T06:11:01.103 回答