Jenkins 发邮件的Job
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的更多相关文章
- jenkins发邮件问题
1.发送邮件不成功 Sending e-mails to: *******@**.cn Finished: FAILURE 解决办法 jenkins-->configure glo ...
- Jenkins设置自动发邮件
安装Jenkins方法详解:https://www.cnblogs.com/lizhe860/p/9901257.html 一.设置全局变量 从首页依次进入系统工具→系统设置 二.在项目配置中设置项目 ...
- jenkins使用(4)-发邮件
邮箱配置 邮件触发器:达到条件就会发邮件 对单独的服务设置邮件 系统设置如下 回到单个任务的设置 配置中的主题设置如下: 回到单个任务的设置 配置中如下: 选择工作空间中的一个文件 发送多个附件: 邮 ...
- 2.jenkins配置邮件提醒
1.前言 在Jenkins的使用中邮件提醒是一个常用功能,Jenkins默认安装了Mailer Plugin插件用于实现此功能. 2.邮件服务器配置 首先在Jenkins的"系统管理&quo ...
- Jenkins 配置邮件通知步骤
Jenkins 配置邮件通知前言 可以在Jenkins 中配置邮件通知,比如在构建失败时发送邮件通知项目组来及时修复问题. Jenkins 邮件通知功能的插件主要包括: Mailer Plugin ( ...
- testng优化:失败重跑,extentReport+appium用例失败截图,测试报告发邮件
生成的单html方便jenkins集成发邮件,= = 构建失败发邮件 参考:https://blog.csdn.net/galen2016/article/details/77975965 步骤: 1 ...
- Jenkins进阶-邮件通知(9)
公司内部每天大概会发布N多版本,也不能派员工一直去盯着版本发布,所以希望发布完成后通知相关人员,Jenkins最早采用通知机制就是短信和邮件,由于短信成本很高,所以我们一般在发布结束后会采用邮件.现在 ...
- Jenkins 之邮件配置
Jenkins 之邮件配置其实还是有些麻烦的,坑比较多,一不小心就...我是走了很多弯路的. 这里记录下来,希望大家以后不要重蹈覆辙: 我测试过,这里的 Extended E-mail Notific ...
- jenkin 构建失败 才发邮件通知
使用场景:自动化测试,一般需要配置定时执行(每天执行一次,没周执行一次),如果有失败,则发邮件给相关人员关注.此时需要使用jenkins的邮件发送配置.修改job的configure配置步骤如下: 1 ...
随机推荐
- 关于Kubernetes Master高可用的一些策略
关于Kubernetes Master高可用的一些策略 Kubernetes高可用也许是完成了初步的技术评估,打算将生产环境迁移进Kubernetes集群之前普遍面临的问题. 为了减少因为服务器当机引 ...
- blaze advisor模型部署工具
python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...
- python脚本使用源码安装不同版本的python
# coding=utf-8 import os import sys # 判断是否是root用户 if os.getuid() == 0: pass else: print('当前用户不是root用 ...
- HBase在特征工程中的应用
前言HBase是一款分布式的NoSQL DB,可以轻松扩展存储和读写能力. 主要特性有: 按某精确的key获取对应的value(Get) 通过前缀匹配一段相邻的数据(Scan) 多版本 动态列 服务端 ...
- WPF 问题 PresentationCore.dll!System.Windows.Media.Composition.DUCE.Channel.SyncFlush() 分析
错误信息: 没有足够的内存继续执行程序 在 System.Windows.Media.Composition.DUCE.Channel.SyncFlush() 在 System.Windows.Int ...
- Qt编写气体安全管理系统2-界面框架
一.前言 整体框架包括两个部分,一部分是UI界面框架,比如一级二级导航菜单按钮整体布局等,一部分是项目框架,上一篇文章说的是项目框架,这一篇文章来说界面框架,Qt做界面非常快速和高效,尤其是提供了可视 ...
- ArrayList数组操作
String字符类型的操作方法 public static void main(String[] args) { // ArrayList ArrayList<String> list = ...
- 使用Commons math做数值计算
使用Commons math做数值计算 觉得有用的话,欢迎一起讨论相互学习~Follow Me 最近使用jmetal做多目标的时候,想用一些简单的方法求最大值最小值方差和协方差矩阵,但是原生代码真的是 ...
- 常用OID(SNMP)
系统参数(1.3.6.1.2.1.1) OID 描述 备注 请求方式 .1.3.6.1.2.1.1.1.0 获取系统基本信息 SysDesc GET .1.3.6.1.2.1.1.3.0 监控时间 s ...
- Python - Django - ORM QuerySet 方法补充
models.py: from django.db import models class Employee2(models.Model): name = models.CharField(max_l ...