在我的Jenkins管道中,如果post管道发生故障,我通常使用声明性功能向我发送电子邮件。
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。相反,您将需要在所有阶段将阶段名称存储在变量中。因此,一旦某个阶段失败- 詹金斯将不会继续进行下一阶段,因此您将获得“失败”阶段的名称。
env.STAGE_NAME
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'