我们有几个jenkins管道作业设置为“来自scm的管道”,可以从github检出jenkins文件并运行它。在jenkinsfile中有足够的基于try / catch的错误处理,可以捕获错误情况并通知正确的通道。This blog post深入探讨了如何实现此目标。
但是,如果首先存在获取jenkinsfile的问题,则该作业会静默失败。甚至在管道启动之前,如何从一般作业启动失败中生成通知?
答案 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)
答案 2 :(得分:0)
显然这是詹金斯的一个悬而未决的问题:https://issues.jenkins.io/browse/JENKINS-57946
我决定使用前面提到的 Yogesh 答案。这基本上意味着使用称为脚本控制台的 Jenkins 功能。以下是了解其工作原理的相关链接:https://www.jenkins.io/doc/book/managing/script-console/ 在底部,您会找到对 Yogesh 提到的插件的引用。