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

标签 jenkins jenkins-plugins jenkins-pipeline jenkins-cli

在我的Jenkins管道中,我通常使用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收到故障通知时,他应该知道管道的哪个阶段发生故障以及错误日志。

提前致谢。

最佳答案

您可以使用一个名为env.STAGE_NAME的变量。但是,根据您的情况,您可能需要将阶段名称存储在其他变量中,因为当您在env.STAGE_NAME阶段中获得post时,结果将是Declarative: Post Actions。相反,您将需要在所有阶段将阶段名称存储在变量中。因此,一旦某个阶段失败- 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并通过电子邮件发送整个构建日志文件:
emailext attachLog: true, body: '', compressLog: true, subject: 'Build failed.', to: 'somebody@somewhere.com'

关于jenkins - 我怎么知道 Jenkins 管道的哪个阶段失败了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50411381/

相关文章:

jenkins - 尝试重新启动时的状态代码 500。安装插件后重启选项消失了

声明性 Jenkins 管道中的 Powershell 脚本

jenkins - Jenkins 管道上的多步 shell 命令

android - 如何更改Android Flavors的构建顺序

jenkins - 检查 Jenkins 中的差异

configuration - Jenkins:在电子邮件中构建矩阵作业错误?

ios - 如何通过jenkins更新xcode plist中的版本号

javascript - 加载表单时,如何在 Jenkins jelly 脚本中获取对 Builder 配置的表单元素的引用?

Jenkins 正在重新使用管道工作区,我希望每个构建都有一个独特的工作区

node.js - 从 Windows 批处理文件返回字符串