我怎么知道jenkins管道的哪个阶段失败了

问题描述 投票:0回答:2

在我的 Jenkins 管道中,我通常使用

post
声明函数来向我发送电子邮件,以防管道出现故障。

post
函数的简单语法如下:

post {
    failure {
        mail to: '[email protected]',
             subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
             body: "Something is wrong with ${env.BUILD_URL}"
    }
}

在上面的电子邮件中,我还想提及管道的哪个阶段(假设管道有 5 到 6 个阶段)发生故障。我怎样才能做到这一点?非常感谢任何帮助。

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

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

提前致谢。

jenkins jenkins-plugins jenkins-pipeline jenkins-cli
2个回答
28
投票

有一个名为

env.STAGE_NAME
的变量,您可以使用它。但是,在您的情况下,您可能需要将阶段名称存储在不同的变量中,因为当您在
env.STAGE_NAME
阶段获得
post
时,结果将为
Declarative: Post Actions
。相反,您需要将阶段名称存储在所有阶段的变量中。因此,一旦一个阶段失败 - 詹金斯将不会继续下一阶段,因此您将拥有“失败”的阶段名称。

举个例子:

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 并通过电子邮件发送整个构建日志文件:

emailext attachLog: true, body: '', compressLog: true, subject: 'Build failed.', to: '[email protected]'


0
投票

我找不到阶段步骤插件。 请有任何建议。

© www.soinside.com 2019 - 2024. All rights reserved.