Jenkins要做到构建失败的时候发送邮件,常规做法是加个全局的post failure,类似这样的代码

pipeline {
agent any stages { stage('deploy') {
steps {
script {
error 'failed'; }
}
} } post {
always {
echo 'This will always run'
}
success {
echo 'This will run only if successful'
}
failure {
mail bcc: '', body: "<b>Example</b><br>Project: ${env.JOB_NAME} <br>Build Number: ${env.BUILD_NUMBER} <br> URL de build: ${env.BUILD_URL}", cc: '', charset: 'UTF-8', from: '', mimeType: 'text/html', replyTo: '', subject: "ERROR CI: Project name -> ${env.JOB_NAME}", to: "foo@foomail.com";
}
unstable {
echo 'This will run only if the run was marked as unstable'
}
changed {
echo 'This will run only if the state of the Pipeline has changed'
echo 'For example, if the Pipeline was previously failing but is now successful'
}
} }

  这种做法有一点不好之处就是有几个JOB 需要发邮件就需要写几份发邮件代码,对原来Jenkins代码也有侵染。

有一种办法可以避免这样的情况,新建一个JOB ,这个JOB名字就叫做发邮件,把这个JOB 设置为上游JOB 触发,意思是当需要发邮件的JOB 在构建完以后,不管成功失败都会触发发邮件的JOB,来实现统一发邮件。

1.新建pipeline JOB, 在‘其它工程后触发’ 这里填上你想要发邮件的job,如果有多个使用逗号分隔 .

2.pipleline 的代码

pipeline {
agent any stages { stage('deploy') {
steps {
script {
String buildResult = "";
String buildNumber = "";
String jobName = "";
(buildResult, jobName, buildNumber) = getUpstreamBuildResult(); String buildUrl = "http://localhost:8080/job/${jobName}/${buildNumber}/console" if (buildResult == 'FAILURE') {
echo "send email";
mail bcc: '', body: "<b>Example</b><br>Project: ${jobName} <br>Build Number: ${buildNumber} <br> URL de build: ${buildUrl}", cc: '', charset: 'UTF-8', from: 'tianhe1006@126.com', mimeType: 'text/html', replyTo: '', subject: "ERROR CI: Project name -> ${jobName}", to: "jonas.tian@activenetwork.com";
} }
}
} } } def getUpstreamBuildResult() {
def upstream = currentBuild.rawBuild.getCause(hudson.model.Cause$UpstreamCause)
String jobName = upstream ? .getUpstreamProject();
echo jobName;
String buildNumber = "${upstream?.getUpstreamBuild()}";
echo buildNumber;
def upstreamTriggerBuildResult = Jenkins.instance.getAllItems(AbstractItem.class)
.findAll {
it.fullName == upstream.getUpstreamProject()
}
.collect {
proj - > proj.getBuilds().findAll {
it.number == upstream.getUpstreamBuild()
}.collect {
it.getResult()
}
}
.flatten()[0]; echo "${upstreamTriggerBuildResult}"; return [upstreamTriggerBuildResult, jobName, buildNumber];
}

  注意一点,这里用到了不安全代码,需要手动approve,运行一次,就会看到报错,一直点approve 就好了,但是如果不想这么麻烦可以安装一个插件

Permissive Script Security Plugin

https://wiki.jenkins.io/display/JENKINS/Permissive+Script+Security+Plugin

安装这个插件后就可以自动approve 不安全代码。

Jenkins 发邮件的Job的更多相关文章

  1. jenkins发邮件问题

    1.发送邮件不成功 Sending e-mails to: *******@**.cn    Finished: FAILURE 解决办法     jenkins-->configure glo ...

  2. Jenkins设置自动发邮件

    安装Jenkins方法详解:https://www.cnblogs.com/lizhe860/p/9901257.html 一.设置全局变量 从首页依次进入系统工具→系统设置 二.在项目配置中设置项目 ...

  3. jenkins使用(4)-发邮件

    邮箱配置 邮件触发器:达到条件就会发邮件 对单独的服务设置邮件 系统设置如下 回到单个任务的设置 配置中的主题设置如下: 回到单个任务的设置 配置中如下: 选择工作空间中的一个文件 发送多个附件: 邮 ...

  4. 2.jenkins配置邮件提醒

    1.前言 在Jenkins的使用中邮件提醒是一个常用功能,Jenkins默认安装了Mailer Plugin插件用于实现此功能. 2.邮件服务器配置 首先在Jenkins的"系统管理&quo ...

  5. Jenkins 配置邮件通知步骤

    Jenkins 配置邮件通知前言 可以在Jenkins 中配置邮件通知,比如在构建失败时发送邮件通知项目组来及时修复问题. Jenkins 邮件通知功能的插件主要包括: Mailer Plugin ( ...

  6. testng优化:失败重跑,extentReport+appium用例失败截图,测试报告发邮件

    生成的单html方便jenkins集成发邮件,= = 构建失败发邮件 参考:https://blog.csdn.net/galen2016/article/details/77975965 步骤: 1 ...

  7. Jenkins进阶-邮件通知(9)

    公司内部每天大概会发布N多版本,也不能派员工一直去盯着版本发布,所以希望发布完成后通知相关人员,Jenkins最早采用通知机制就是短信和邮件,由于短信成本很高,所以我们一般在发布结束后会采用邮件.现在 ...

  8. Jenkins 之邮件配置

    Jenkins 之邮件配置其实还是有些麻烦的,坑比较多,一不小心就...我是走了很多弯路的. 这里记录下来,希望大家以后不要重蹈覆辙: 我测试过,这里的 Extended E-mail Notific ...

  9. jenkin 构建失败 才发邮件通知

    使用场景:自动化测试,一般需要配置定时执行(每天执行一次,没周执行一次),如果有失败,则发邮件给相关人员关注.此时需要使用jenkins的邮件发送配置.修改job的configure配置步骤如下: 1 ...

随机推荐

  1. NonSerialized 属性忽略序列化报错'NonSerialized' is not valid on this declaration type

    [XmlIgnore] [NonSerialized] public List<string> paramFiles { get; set; } //I get the following ...

  2. python清理docker-harbor的多余镜像

    # coding: utf-8 from operator import itemgetter from urllib import parse import requests import date ...

  3. postgre ~模糊查询慢解决方式

    工作中遇到个情况 sql如下: SELECT org.id orgid,org."path" FROM ( SELECT * FROM A INNER JOIN t_org org ...

  4. spring boot集成Websocket

    websocket实现后台像前端主动推送消息的模式,可以减去前端的请求获取数据的模式.而后台主动推送消息一般都是要求消息回馈比较及时,同时减少前端ajax轮询请求,减少资源开销. spring boo ...

  5. 提供Web相关的个工具类

    package com.opslab.util.web; import com.opslab.util.ConvertUtil;import com.opslab.util.StringUtil; i ...

  6. VS编译出错不自动运行上次的程序

  7. 【Linux】Gitlab库已损坏前端显示500错误解决方法

    背景: 在进行gitlab数据迁移之后,所有页面正常访问,唯独在访问项目repo地址时,报500错误 1 查看日志: 命令查看: gitlab-ctl tail 或者手动查看:/var/log/git ...

  8. Qt编写自定义控件67-通用无边框

    一.前言 在之前的一篇文章中写过一个通用的移动控件,作用就是用来传入任意的widget控件,可以在父类容器中自由移动.本篇文章要写的是一个通用的无边框类,确切的说这不叫控件应该叫组件才对,控件是要看得 ...

  9. jvm 虚拟机字节码指令表(转)

        

  10. kafka删除topic后再创建同名的topic报错(ERROR org.apache.kafka.common.errors.TopicExistsException)

    [hadoop@datanode3 logs]$ kafka-topics.sh --delete --zookeeper datanode1:2181 --topic firstTopic firs ...