当前位置: 首页 > 知识库问答 >
问题:

在不杀死作业的情况下报告Jenkins管道中的shell脚本测试错误

东门宜
2023-03-14

理想情况下,如果“测试”脚本失败,我们不会取消构建,而是在最后报告错误。这可以通过用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设置迁移到一个Jenkine管道,Jenkinsfile来表示整个过程,在Jenkins设置中,每个分支有十几个作业。很多作业都是脚本测试,要么通过(退出代码0)要么失败。通过查看控制台日志可以查看错误消息。

共有1个答案

晁璞
2023-03-14

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

还有其他方法,但这些方法相当繁琐。:

  • 忽略bash中的非零退出代码。集+e
  • 将输出重定向到外部文件
sh "${mvnHome}/bin/mvn -B -Dmaven.test.failure.ignore verify"
step([$class: 'JUnitResultArchiver', testResults: '**/target/surefire-reports/TEST-*.xml'])
 类似资料:
  • 我使用jenkins的代码为每个插件生成覆盖率,并显示我喜欢的管道。是否有一个插件我可以使用它(例如Cobertura,但它似乎不受管道支持)?

  • 问题内容: 我能够运行以下shell脚本,但无法从Jenkins管道代码运行。 尝试1。 输出: 尝试2: 尝试过sh“”“ 输出 : 美元符号后的非法字符串体字符;解决方案:要么转义文字美元符号,要么将值表达式括起来 有人能帮我吗? 问题答案: 这应该工作。 您还需要在调用下面的新subshel​​l时转义$

  • 拉斯宾(杰西)-root@RaspberryPi-腻子 在我输入的终端中 现在我得到了一个包含此代码的脚本 有一个cronjob每小时启动一次这个脚本 苏。一定有什么地方出错了。因为他将变量$finalanswer解读为nothing。 这意味着在此脚本之外定义的变量将不起作用? 我该如何解决这个问题?

  • 我已经将Jenkins build配置为构建gradle项目并在其上运行测试(使用connectedInstrumentTest),但构建在启动几秒后失败。 com.android.ddmlib.installexception在com.android.ddmlib.device.installpackage(device.java:884)在com.android.builder.testing

  • 问题内容: 我有一个长期运行的System Groovy脚本,它可以启动数以万计的其他构建。为了不使构建队列过长(这将使UI无法使用),它将监视构建队列的长度。如果构建队列长于给定的阈值,它将不会启动任何新的构建并休眠一分钟。 问题是,此脚本无法响应用户的kill操作。当用户单击UI上的“杀死此构建”按钮时,什么也没有发生。我想知道是否有一种方法可以让系统Groovy脚本检查是否应该终止当前版本,

  • 问题:- 在我的Jenkins脚本管道部分中有以下代码。我已经在Manage Jenkins下添加了我的私人Docker注册表URL和凭据-- Jenkins表单错误- 代码:-