Jenkins构建通知
一.简介
类似于监控报警,jenkins在配置持续集成后,job的执行将自动化,这就需要每次将构建结果通知到不同载体中进行查看。
像我所在的项目中,可能时不时就发布一个test环境版本,这时候对于测试人员是不友好的,页面正在进行点击测试,突然就没反应了,正在发版中。
就需要微信/钉钉等方式进行通知,不仅告诉开发也告诉测试和运维,当前有版本正在发布。
二.推送到gitlab
当Jenkins执行完构建后,我们还可以将构建结果推送到Gitlab的相应commit记录上,这样就可以将构建状态与commit关联起来。
1.进入Jenkins-》Configure System页,找到“Gitlab”选项,填入Gitlab地址。注意“Connection name”的值,后面会使用到
2.在Credentials下拉列表中选择"GitLab API token"后,单击"Test Connection"按钮,如果返回Success,就说明集成成功了
3.在pipeline的post部分,将构建结果更新到GitLab的相应commit记录上。除此之外,还需要在options部分加入gitLab Connection配置,同时传入"gitlab”参数。"gitlab” 就是上文中提醒读者注意的"Connection name”的值。
pipeline {
agent any
triggers {
gitlab(triggerOnPush: true, triggerOnMergeRequest: true, branchFilterType:'All',
secretToken: "abcdefghijk1mnopqrstuvwxyz0123456789ABCDEF")
}
stages {
stage('build') {
steps {
echo "hello world from gitlab trigger"
}
}
post {
failure {
updateGitlabCommitStatus name: 'build', state: 'failed'
}
success {
updateGitlabCommitStatus name:'build', state: 'success'
}
}
options {
gitLabConnection( 'gitlab')
}
}
}
需要手动触发一次构建,pipeline才会生效。当前做了一次成功构建、一次失败构建的实验,在Gitlab上项目的commit列表中,显示了最近两次commit的构建状态
三.邮件通知
自带配置
我们使用163邮箱来演示如何在pipeline中加入邮件通知。
步骤如下:
1.进入Manage Jenkins→Configure System→Jenkins Location设置页面,设置管理员邮箱
提示:这一步是必不可少的;否则,在发送邮件通知时会报出"com.sun.mail.smtp.SM TPSend-FailedException : 553 Mail frommust equal authorized user”错误
2.在同一个页面中找到E-mail Notification部分
勾选“Test configuration by sending test e-mail”复选框,输入接收测试邮件的邮箱,然后单击“Test configuration”按钮,
如果提示“Email was successfully sent”,就说明配置成功。
3.在Jenkins pipeline的post部分加入mail步骤。
mail步骤的关键参数介绍如下∶
- subject,邮件主题。
- to,收件地址
- body,邮件内容
- from,发件地址
欲了解更多参数,可以到官方文档中查看
Email Extension
mailer插件提供的功能过于简单。Email Extension插件对mailer插件进行了扩展,支持更多的特性。
- 可以定制接收人的邮件列表。
- 可以将构建日志以附件形式加到邮件中,还可以设置对日志进行压缩。
- 可以发送附件
具体使用步骤如下:
1.安装Email Extension插件
2.进入Manage Jenkins→Configure System→Extended E-mailNotification配置页面
在Jenkinsfile中使用emailext步骤,因此只要配置SMTP server ,其他选项配置保持默认配置就可以了。
3.将emailext步骤加入pipeline的post部分的failure块内。
post {
failure {
emailext body:
"""<p>EXECUTED: Job <b>\ '${env. 0B_NAME}:${env.BUILD_NUMBER})\ '
</b></p><p>View console output at "<a href="${env.BUILD_URL}">
${env.JOB_NAME}:${env.BUILD_NUMBER}</a>"</p>
<p><i>(Build log is attached .)</i></p>""",
compressLog: true,
attachLog: true,
recipientProviders: [culprits(), developers(),requestor(), brokenBuildSuspects()],
replyTo: 'do-not-reply@company.com',
subject: "Status: ${currentBuild.result?: 'SUCCESS'} - Job \ '${env. 0B_NANE}: ${env.BUILD_NUMBER}\'",
to: "jenkinsbooksample@163.com"
}
}
收到邮件
emailext步骤的常用参数介绍如下∶
- subject : String类型,邮件主题。
- body : String类型,邮件内容。
- attachLog (可选):Bool类型,是否将构建日志以附件形式发送。
- attachmentsPattern (可选) : String类型,需要发送的附件的路径,Ant风格路径表达式。
- compressLog (可选):Bool类型,是否压缩日志。from(可选) : String类型,收件人邮箱。
- to (可选) : String类型,发件人邮箱。
- recipientProviders (可选): List类型,收件人列表类型。replyTo (可选):回复邮箱。
常用的收件人列表类型
提示:requestor ()会读取登录用户的邮箱(在个人资料设置页可以设置)。
关于完整的收件人列表类型,可以参考官方文档
四.钉钉通知
钉钉(DingTalk )是阿里巴巴集团开发的企业协同办公软件。本节介绍Jenkins与钉钉的集成。原理很简单,就是在钉钉群中增加一个钉钉机器人,我们将消息发送到钉钉机器人的API就可以了。
具体步骤如下:
1.配置钉钉机器人,在钉钉群的右上角单击机器人形状的图标
在弹出的机器人类型列表中,选择“Custom”(自定义)类型
按照钉钉的提示操作到达最后一步,复制webhook的URL中的accessToken的值,后面的步骤会使用到
2.安装DingTask插件
3.在Jenkinsfile中加入dingTalk步骤
dingTalk accessToken: "<accessToken值>", imageUrl: "<钉钉群里显示消息的缩略图>",jenkinsUrl:'<Jenkins的链接>',message: '<文本消息>', notifyPeople: '张三'
最后效果如图
注意:如果accessToken的值不对,dingTalk并不会报错。另外,应该使用凭证管理accessToken的值,而不是明文写在Jenkinsfile中
五.脚本钉钉通知
因为插件使用报错,就自己写了脚本达到同样效果
1.创建钉钉群,管理界面添加机器人
2.选择自定义方式
3.复制好webhook
4.选择关键字,这里配置后,消息里有发布这个词才能生效
5.在jenkins服务器上配置脚本/jen_script/dingding.py,这里钉钉用markdown语法写内容
#!/usr/local/python-3.6/bin/python3.6
import json,requests,sys,time,datetime
#[工程名、分支号、是否成功、编号]
job = sys.argv[1]
branch = sys.argv[2]
stat = sys.argv[3]
bianhao = sys.argv[4]
if int(stat) == 0:
name = '发布成功!'
tupian = '![file](https://prod-private.oss-cn-beijing.aliyuncs.com/yw/QQ%E6%88%AA%E5%9B%BE20201109153327.png)'
elif int(stat) == 1:
name = '发布失败!'
tupian = '![file](https://prod-private.oss-cn-beijing.aliyuncs.com/yw/QQ%E6%88%AA%E5%9B%BE20201109163201.png)'
url = "https://oapi.dingtalk.com/robot/send?access_token=022d90fsadaplfs8fgjsc4dc4c86cdf4ed666"
title = job + name
nowtime = datetime.datetime.now()
nowtime = str(nowtime.strftime('%Y-%m-%d %H:%M:%S'))
msg = """### %s \n
> 时间: %s \n
> 分支: %s \n
> 编号: #%s \n
> 地址: [工程链接](http://10.0.9.115:8080/job/%s) \n
%s
"""
def Alert():
headers = {"Content-Type": "application/json"}
data = {"msgtype": "markdown",
"markdown": {
"title": title,
"text": msg %(title, nowtime, branch, bianhao, job, tupian)
}
}
r = requests.post(url, data=json.dumps(data), headers=headers, verify=False)
print(r.text)
Alert()
6.在OSS的prod-private的ubcket中,yw文件夹存储着构建时通知的图片
图片放到这里,可以拿去用,都是同大小的
成功:
失败:
7.编写pipeline配置
pipeline {
agent any
options {
buildDiscarder(logRotator(numToKeepStr: '10'))
}
environment {
workspace = pwd()
release_branch = 'master'
}
post { //直接复制这段到pipeline阶段内
success {
sh "/jen_script/dingding.py ${JOB_NAME} ${release_branch} 0 ${BUILD_NUMBER}"
}
failure {
sh "/jen_script/dingding.py ${JOB_NAME} ${release_branch} 1 ${BUILD_NUMBER}"
}
}
8.发一版测试
六.HTTP请求通知
使用HTTP Request插件,我们能在Jenkins pipeline中发送HTTP请求给第三方系统。这是最通用的Jenkins与第三方系统集成的方式之一。
HTTP Request插件提供了httpRequest步骤,代码示例如下:
steps {
script{
def response = httpRequest(url: 'http://192.168.88.3:8081',acceptType:"APPLICATION_JSON",
contentType: "APPLICATION_JSON",
httpMode: "POST",
authentication: "http_request",
customHeaders:[
[name: "headername", value: "headerValue"],
[name: "token", value: "secret", maskValue: true]
],
requestBody: "{'buildNumber': '${env.BUILD_NUMBER}'}",
timeout: 5,
validResponseCodes: "200:302")
echo "${response.status}"
echo "${response.content}"
} //end of script
}
httpRequest步骤返回的response对象包含两个字段。
- content :响应内容
-status :响应码
以下是httpRequest步骤支持的参数
- url:字符串类型,请求URL
- acceptType:枚举类型,HTTP请求Header的“Accept”的值类型为NOT_SET.TEXT_HTML、TEXT_PLAIN.APPLICATION_FORM、APPLICATION_JSON、APPLICATION_JSON_UTF8、APPLICATION_TAR、APPLICATION_ZIP、APPLICATION_OCTETSTREAM。
- authentication :字符串类型,Username with password凭证的ID,采用的是HTTP Basic认证方式
- consoleLogResponseBody :布尔类型,是否将请求的响应body
打印出来 - contentType:枚举类型,HTTP请求Header的“Content-type"的值类型,与acceptType支持的枚举一样
- customHeaders : HttpRequestNameValuePair对象数组,HTTP请求Header部分的内容,该对象有3个参数
- name :字符串类型,Header名称
- value :字符串类型,Header值。
- maskValue :布尔类型,是否隐藏 Header值。如果设置为true,则在打印时使用“*”代替。
- httpMode:枚举类型,HTTP方法,有GET(默认)、HEAD.POST、PUT、DELETE、OPTIONS、PATCH。
- httpProxy:字符串类型,HTTP代理地址
- ignoreSslErrors :布尔类型,是否忽略SSL错误。
- requestBody :字符串类型,请求的body内容。
- timeout :整型,超时时间,单位为秒。默认值为0,代表不设置超时时间。
- validResponseCodes :字符串类型,代表HTTP请求成功的状态码。它支持3种格式的值。
- 单状态值:比如200,当收到200响应状态码时,表示HTTP请求成功。
- 多状态值:当响应状态码符合多个状态码中的一个时,代表请求成功。多个状态码之间使用逗号(,)分隔。比如200,404,500。
- 范围状态值∶格式为“From : To”。比如200 : 302,代表收到200到J302的响应状态码都代表请求成功。
- validResponseContent :字符串类型,比如设置它的值为"showme.codes”,那么只有当HTTP返回的内容中包含了
"showme.codes”时,才代表请求成功。 - quiet :布尔类型,是否关闭所有的日志打印,默认值为false。
- responseHandle:枚举类型,获取HTTP响应内容的方式。其值可以为
- NONE:不读取响应内容。
- LEAVE_OPEN:当执行完请求后,并不会返回响应的内容,而是返回一个打开了的inputStream,由你自己决定该如何读取响应内容。但是在使用完之后,记得调用input-Stream的close ()方法关闭。
- STRING(默认值)∶将响应内容转换成一个字符串。
- outputFile:字符串类型,请求响应内容的输出路径。
Jenkins构建通知的更多相关文章
- jekins构建通知邮件配置及邮件附件设置,jenkins构建通知邮件没有RF的log和report文件
全局配置: 系统管理-系统设置-Extended E-mail Notification (本邮件是程序自动下发的,请勿回复!)<br/><br/>项目名称:$PROJECT_ ...
- RF+Jenkins构建持续集成
引入RF是为了能够快速的开展自动化验收测试,Jenkins而一种持续集成工具,用于监控持续重复的工作,持续的软件版本发布/测试项目,而通过RF+Jenkins可以有利的对RF构建的接口项目进行持续集成 ...
- 持续集成之④:GitLab触发jenkins构建项目
持续集成之④:GitLab触发jenkins构建项目 一:目的为在公司的测试环境当中一旦开发向gitlab仓库提交成功代码,gitlab通知jenkins进行构建项目.代码质量测试然后部署至测试环境, ...
- Jenkins邮件通知
Jenkins邮件通知 Jenkins 配备了一个开箱工具,添加一个电子邮件通知的构建项目. 第1步 - 配置SMTP服务器. 转到 Manage Jenkins → Configure System ...
- Jmeter+maven+Jenkins构建云性能测试平台(mark 推荐)
转自:http://www.cnblogs.com/victorcai0922/archive/2012/06/20/2555502.html Jmeter+maven+Jenkins构建云性能测试平 ...
- Jenkins构建持续集成
Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变得可能.现在软件开发追求的是效率以及质量,Jenkins使得自动化成为可能! 亮点 采用shell自定义脚本,控制 ...
- GitLab 自动触发 Jenkins 构建
GitLab 是当前应用非常广泛的 Git Hosting 工具,Jenkins 是非常牛逼的持续集成工具.尽管 GitLab 有内建的 GitLab CI,但它远没有 Jenkins 那么强大好用. ...
- sonar+Jenkins 构建代码质量自动化分析平台
1.Sonar 介绍 Sonar 是一个用于管理代码质量的开源工具,可以分析代码中的bug和漏洞以及Code Smells,支持20多种编程语言的检测,如java,c/c++,python,php等语 ...
- jenkins构建结果企业微信提醒
每当jenkin在构建之后我们想把构建结果SUCCESS/FAILURE或者其他信息通知给其他人,也许有人会说,不是有邮件提醒吗?但是我这里的环境邮件提醒的话所被通知者并不会第一时间去阅读,所以我们用 ...
随机推荐
- python实现高斯图像金字塔
一,定义 图像金字塔:同一图像的不同分辨率的子图集合,其生成方式有向上取样和向下取样.向下取样是从G0采样形成分辨率较低的G1,G1再采样形成分辨率较低的G2......,就构成了一个金字塔.向下取样 ...
- [bzoj1189]紧急疏散
二分答案+判定,对于一个答案,源点向每一个点连一条流量为1的边,每一扇门向汇点连一条流量为时间的边,每一个人向每一个在答案时间内能走到的门连一条流量为1的边,跑最大流并判断流量是否等于人数. 然而自从 ...
- [luogu5294]序列
也是一道保序回归的题,但思路不同于论文中模板题 考虑两个开口向上的二次函数$f(x)$和$g(x)$,求任意实数$x,y$满足$x\le y$且最小化$f(x)+g(y)$,这个最小值可以分类讨论求出 ...
- [luogu6860]象棋与马
根据扩欧$(a,b)=1$必须要满足,同时,若$a+b$为偶数则格子的"奇偶性"不变,因此$a+b$必须为奇数 反过来,容易证明满足$(a,b)=1$且$a+b$为奇数则一定可行( ...
- 第08章 MySQL聚合函数
第08章 MySQL聚合函数 我们上一章讲到了 SQL 单行函数.实际上 SQL 函数还有一类,叫做聚合(或聚集.分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值. 1 ...
- docker详细
镜像(image) 容器(container) 启动,删除,停止 仓库(repository) docker images
- GoF23种(部分)软件设计模式【核心理解】
设计模式复习 1. 面向对象设计原则 1.1 可维护性较低的软件设计 过于僵硬 过于脆弱 复用率低 黏度过高 1.2 一个好的系统设计 可扩展性 灵活性 可插入性 复用:一个软件的组成部分可以在同一个 ...
- NOI2021 去不了记
没错,由于某些 zszz 的原因,我是真的去不了了(指去不了 ZJ) Day -11 ~ -7 - 2021.7.12 - 2021.7.16 令人自闭的 ISIJ 终于结束了----From ycx ...
- 矩阵树定理&BEST定理学习笔记
终于学到这个了,本来准备省选前学来着的? 前置知识:矩阵行列式 矩阵树定理 矩阵树定理说的大概就是这样一件事:对于一张无向图 \(G\),我们记 \(D\) 为其度数矩阵,满足 \(D_{i,i}=\ ...
- Codeforces 1423N - BubbleSquare Tokens(归纳+构造)
Codeforces 题目传送门 & 洛谷题目传送门 一道思维题. 题目没有说无解输出 \(-1\),这意味着对于任意 \(G\) 一定存在一个合法的排列方案.因此可以考虑采用归纳法.对于一个 ...