jenkins - 在 Jenkins 开始另一项工作时如何获取内部错误消息

标签 jenkins groovy jenkins-pipeline

所以我有一个管道可以生成其他作业(包装在 try/catch 中),如下所示:

script {
    try {
        new_job = build job: 'SomeJob'
    } catch (err) {
        err_msg = err.getMessage()
        error(err_msg)
    }
}

当生成的作业失败时,它也会失败,这正如预期的那样。但是生成的作业如果失败将会失败并显示错误消息,因为我使用了类似的内容:

if (badCondition) {
    error("BUILD FAILED BECAUSE OF INVALID CONDITION")
}

但是在顶级作业的日志中,它是这样写的:

SomeJob #11 completed with status FAILURE (propagate: false to ignore)

我想以某种方式获取内部错误消息,这样我就可以用它来分析错误,而不必进入内部日志。我对其他方法持开放态度,例如设置/返回一些环境变量。但我不确定实现这一目标的最简单方法。谢谢。

最佳答案

所以我想出了一个简单的解决方法。

在内部工作中。将错误消息设置为环境变量:

if (badCondition) {
    error_msg = "BUILD FAILED BECAUSE OF INVALID CONDITION"
    env.BUILD_FAILED_MESSAGE = error_msg
    error(error_msg)
}

在外部作业中生成作业,同时忽略传播(因此所有作业“通过”)

script {
    new_job = build job: 'SomeJob', propagate: false
    if (new_job.getResult() == "FAILURE") {
        error(new_job.getBuildVariables().get("BUILD_FAILED_MESSAGE"))
    }
}

因此,请确保所有失败条件均已设置 env,BUILD_FAILED_MESSAGE,这就是在外部作业中检索它的方式。希望这对有相同使用情况的其他人有所帮助。

关于jenkins - 在 Jenkins 开始另一项工作时如何获取内部错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54585077/

相关文章:

docker - 如何从主机访问Docker容器的内部IP地址?

Jenkins:Pipeline 可选的手动阶段,即不阻塞任何代理

grails - 在Grails中创建管理部分的最佳方法

jenkins - 如何从单个 Jenkins Pipeline 并行 block 中获取 stdout 和 stderr?

android - 使用 Jenkins 签署应用程序

c - groovy "def"声明转换为 C 语言?

Groovy .each 闭包将元素包装在不需要的 Object[] 中

jenkins - "Publish XML Summary Reports"的管道语法

angular - 分组测试结果 : Karma/Protractor integration with Jenkins

jenkins - 在 Jenkins 中禁用 ping 从站