代码之家  ›  专栏  ›  技术社区  ›  Yash

我怎么知道詹金斯管道的哪个阶段失败了

  •  29
  • Yash  · 技术社区  · 6 年前

    在我的詹金斯管道中,我通常使用 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 回复  |  直到 6 年前
        1
  •  28
  •   tftd    5 年前

    有一个变量叫做 env.STAGE_NAME 你可以用。然而,在您的情况下,您可能需要将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: 'somebody@somewhere.com'