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. 谷歌官方 构建您的第一个应用 Kotlin版

    https://developer.android.google.cn/training/basics/firstapp MainActivity.kt package com.example.myf ...

  2. IDEA使用tomcat插件

    在实际项目开发中,特别是分布式项目,往往有N多个子项目需要同时启动测试. 这一切靠本地安装的tomcat是远远不够的,而且繁琐. 这里就需要用到tomca插件. 在pom.xml中引入: <bu ...

  3. SegNet

    Paper link:https://arxiv.org/pdf/1511.00561.pdf Motivation:为了实际应用,主要是在时间效率和存储空间上做了改进: Introduction: ...

  4. Jmeter性能测试实战教程系列-搭建分布式性能测试环境(五)

    Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误.为了让jmeter工具 ...

  5. 转Python开发之AJAX全套

    转自:https://www.cnblogs.com/nulige/p/6603415.html#4206261

  6. 【Leetcode_easy】925. Long Pressed Name

    problem 925. Long Pressed Name solution1: class Solution { public: bool isLongPressedName(string nam ...

  7. CSS3 Filter特效

    CSS3 filter和IE的filter完全是两样东东. Filters主要是运用在图片上,以实现一些特效.(尽管他们也能运用于video上),不过我们在些只来讨论图片上的运用. 语法 elm { ...

  8. ASP.net发布项目引用了C++DLL后页面提示找不到指定模块的异常

    1.在引用C++dll的DllImport位置指定dll位置 [DllImport(@"C:\Windows\System32\DDyn_Method.dll", EntryPoi ...

  9. 第七章 云原生生态的基石 Kubernetes

    7.1 Kubernetes架构 K8s的核心组件: etcd: 协同存储,负责保存整个集群的状态. API:资源操作的唯一入口. controller manager: 维护集群的状态,执行故障检测 ...

  10. nodejs ffi 调用dll

    安装依赖 npm install --global --production windows-build-tools(在管理员权限打开的命令行中执行) npm install -g node-gyp ...