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

我如何知道詹金斯管道的哪个阶段失败了

田博远
2023-03-14

在我的Jenkins管道中,我通常使用< code>post声明函数向我发送电子邮件,以防管道出现故障。

post函数的简单语法如下:

post {
    failure {
        mail to: 'team@example.com',
             subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
             body: "Something is wrong with ${env.BUILD_URL}"
    }
}

在上面的电子邮件中,我还想提到管道的哪个阶段(假设管道有5到6个阶段)失败了。我该怎么做?任何帮助都非常感谢。

上述要求的扩展将是向用户提供实际的错误日志(失败阶段的错误日志),也作为失败通知电子邮件的一部分。

想法是,当用户收到来自 jenkins 的失败通知时,他应该知道管道的哪个阶段以及错误日志一起失败。

提前感谢。

共有1个答案

夏侯博
2023-03-14

有一个名为 env 的变量。您可以使用STAGE_NAME。但是,在您的情况下,您可能需要将阶段名称存储在不同的变量中,因为当您获得env时。STAGE_NAME在发布阶段,结果将是声明性的:发布操作。相反,您需要在所有阶段中将阶段名称存储在变量中。因此,一旦一个阶段失败 - Jenkins 将不会继续下一个阶段,因此您将拥有“失败”的阶段名称。

这里有一个例子:

def FAILED_STAGE

pipeline {
    agent { label "master" }
    stages {
        stage("Stage 1") {
            steps {
                script {
                    FAILED_STAGE=env.STAGE_NAME
                    echo "stage 1"
                }
            }
        }
        stage("Stage 2") {
            steps {
                script {
                    FAILED_STAGE=env.STAGE_NAME
                    echo "stage 2"
                    error "failed for some reason."
                }
            }
        }
        stage("Stage 3") {
            steps {
                script {
                    FAILED_STAGE=env.STAGE_NAME
                    echo "stage 3"
                }
            }
        }
    }
    post {
        failure {
            echo "Failed stage name: ${FAILED_STAGE}"
        }
    }
}

可能有更好的方法来做到这一点,但到目前为止我还没有找到它。

关于日志——从JENKINS-40526开始,你可以使用API并从那里获得日志文件,但是我不确定你能从管道中获得你需要的参数。另一个解决方案是使用emailext,通过电子邮件发送整个构建日志文件:

< code > email XT attach log:true,body:“”,compressLog: true,subject:“构建失败。”,收件人:“someone @ someone . com”

 类似资料:
  • 问题内容: 在我的Jenkins管道中,如果管道发生故障,我通常使用声明性功能向我发送电子邮件。 该函数的简单语法如下: 在上面的电子邮件中,我还想提到管道的哪个阶段(假设管道有5到6个阶段)失败。我怎样才能做到这一点?任何帮助深表感谢。 对上述要求的扩展将是向用户提供实际的错误日志(发生故障的阶段),作为故障通知电子邮件的一部分。 想法是,当用户从jenkins收到故障通知时,他应该知道管道的哪

  • 问题内容: 我已经使用Jenkins为我的node js应用程序创建了CI管道。我的管道包括诸如构建,单元测试,集成测试,代码分析等工作。我知道默认情况下,即使一个测试用例失败,构建也会失败。 问题答案: 您的单元测试脚本将需要处理数学和逻辑,以确定失败的测试百分比足以使整个工作失败。然后,您的单元测试脚本可以返回通过(零)或失败(其他任何结果),詹金斯将相应地标记构建。

  • 问题内容: 运行带有包含多个节点的阶段的Jenkins管道(基于Groovy),我需要将列表从stageA上NodeA上的某个文件传递到StageB上的nodeB。 在stageA NodeA中,我运行 在stageB,我跑步 到目前为止,我已经在控制台中获得了输出。 现在如何将其输出传递到文件? 不能解决问题:-( 我敢肯定这没什么大不了的,但是我已经花了几个小时来搅动互联网,但无济于事。 问题

  • 问题内容: 我想在声明性Jenkins管道内的锁内运行多个阶段: 我收到以下错误: 这是什么问题 该文档明确指出: 也可以用于将多个阶段包装到单个并发单元中 问题答案: 问题是,尽管事实上在2016年9月Beta版中提供了声明式管道,但您引用的博客文章(自10月起)记录的是脚本化管道,而不是声明式的(声明不多,所以我觉得您痛)。尚未将可锁定资源作为声明性管道步骤来使用,而该方式不能启用您正在寻找的

  • 问题内容: 如果工作失败,我不必等待所有人完成。是否可以中止仍在运行的并行阶段。它们必须显示为“已终止”,而不是带有红色十字图标,因为必须突出显示失败的图标。 问题答案: 将parallelsAlwaysFailFast添加到您的选项中,如果任何(并行化)阶段失败,整个管道将停止。 引用来源: 总是失败失败 将管道中所有后续并行阶段的failfast设置为true。 例如:options {par

  • 问题内容: 我有一个Jenkinsfile脚本,该脚本测试执行SVN合并的可能性,然后向用户询问提交合并的权限。 我想知道回答“输入”步骤的用户名,以便将其写入提交消息中。 这有可能吗? 假设我想这样做: 问题答案: 该步骤具有一个可选的,它允许指定返回的键,该键应包含提交输入对话框的用户: 如果指定,则这是返回值的名称,该值将包含批准此输入的用户的ID。 返回值将以类似于该值的方式进行处理。 类