gpt4 book ai didi

jenkins - 在 Jenkins 管道中报告 shell 脚本测试错误而不终止作业

转载 作者:行者123 更新时间:2023-12-02 21:14:16 28 4
gpt4 key购买 nike

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

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

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

  • 将错误保存在数组中并在末尾打印
  • 捕获输出并写入 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),要么失败。通过查看控制台日志查看错误消息。

最佳答案

退出代码处理

外壳

在编写时,管道插件不支持返回退出代码或 sh 步骤的输出。然而有一个开放的ticket它跟踪此功能。因此 try/catch/finally 将是处理这种情况的默认方法。

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

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

Maven

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 进行分析。

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

Jenkins 2.0 包括 Stage View plug-in它以清晰的方式呈现了 Pipeline 工作流程。

关于jenkins - 在 Jenkins 管道中报告 shell 脚本测试错误而不终止作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36660293/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com