关于詹金斯工作失败的通知-使用scm

时间:2018-11-14 21:56:05

标签: jenkins notifications jenkins-pipeline

我们有几个jenkins管道作业设置为“来自scm的管道”,可以从github检出jenkins文件并运行它。在jenkinsfile中有足够的基于try / catch的错误处理,可以捕获错误情况并通知正确的通道。This blog post深入探讨了如何实现此目标。

但是,如果首先存在获取jenkinsfile的问题,则该作业会静默失败。甚至在管道启动之前,如何从一般作业启动失败中生成通知?

3 个答案:

答案 0 :(得分:4)

Jenkins SCM管道没有类似于catch/finally的执行规定,如果Jenkinsfile加载失败,该执行规定将被调用,而且我认为将来不会有任何执行规定。

但是,在詹金斯(Jenkins)上每项工作的每次构建之后,都有global-post-script这个运行groovy脚本的脚本。您必须将该脚本放置在$JENKINS_HOME/global-post-script/目录中。

使用此功能,您可以根据失败的项目和/或失败的原因/异常向管理员发送通知或电子邮件。

可以放入脚本的示例代码

if ("$BUILD_RESULT" != 'SUCCESS') {
  def job = hudson.model.Hudson.instance.getItem("$JOB_NAME")
  def build = job.getBuild("$BUILD_NUMBER")
  def exceptionsToHandle = ["java.io.FileNotFoundException","hudson.plugins.git.GitException"]
  def foundExection = build
    .getLog()
    .split('\n')
    .toList()
    .stream()
    .filter{ line -> 
      !line.trim().isEmpty() && !exceptionsToHandle.stream().filter{ex -> line.contains(ex)}.collect().isEmpty()
    }
    .collect()
    .size() > 0;
  println "do something with '$foundExection'"
}

答案 1 :(得分:0)

您可以先验证您的Jenkins文件,然后再将其推送到存储库。

Command-line Pipeline Linter

还有一些IDE Integrations

答案 2 :(得分:0)

显然这是詹金斯的一个悬而未决的问题:https://issues.jenkins.io/browse/JENKINS-57946

我决定使用前面提到的 Yogesh 答案。这基本上意味着使用称为脚本控制台的 Jenkins 功能。以下是了解其工作原理的相关链接:https://www.jenkins.io/doc/book/managing/script-console/ 在底部,您会找到对 Yogesh 提到的插件的引用。