jenkins构建结果企业微信提醒
每当jenkin在构建之后我们想把构建结果SUCCESS/FAILURE或者其他信息通知给其他人,也许有人会说,不是有邮件提醒吗?但是我这里的环境邮件提醒的话所被通知者并不会第一时间去阅读,所以我们用“钉钉”,“企业微信”来第一时间去通知你想通知的小伙伴们。
因为我这里的环境用的是企业微信所以本文都是基于企业微信来说的,不过在钉钉上也可以使用,也可以利用钉钉在jenkins上的插件,那样更方便些。
进入正题
我们要获得jenkin的构建结果是SUCCESS还是FAILURE是需要jenkin构建完毕才能获取到的,那么我们从哪里能获得构建结果以及其他信息呢?
我们可以用日志信息或者api的构建信息来获取
我们 我们可以用日志信息或者api的构建信息来获取,这里我们是基于查看日志来查看构建结果以及其他信息,我这里以windows环境以及jenkins默认安装环境来举例
每一次日志文件的位置我们可以在如图位置找到
我们去最后一次构建结果查看日志文件
在结果查看构建结果是否成功
那么我们可以用python来写个读取结果的脚本,用jenkins来自动运行
import requests
import json
import urllib.request
import urllib.error
import time
# 获取构建结果
def getResult():
fname = pathGitLab
with open(fname, 'rb') as f: #打开文件
first_line = f.readline() #读第一行
#print (first_line)
off = -50 #设置偏移量
while True:
f.seek(off, 2) #seek(off, 2)表示文件指针:从文件末尾(2)开始向前50个字符(-50)
lines = f.readlines() #读取文件指针范围内所有行
# print (lines)
if len(lines)>=2: #判断是否最后至少有两行,这样保证了最后一行是完整的
last_line = lines[-1] #取最后一行
print (last_line)
break
off *= 2
if 'FAILURE' in last_line.decode() :
return 1
# else:
# return 0
#获取下一次构建的Number和当前构建的number
def getNextNumber():
f = open(r'C:\Program Files (x86)\Jenkins\jobs\Developer\nextBuildNumber', 'r')
currentNumber=int(f.read())-1
return currentNumber
#网络模块,用于企业微信发送信息
def jenkins(result):
url='https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=2ef5c862-b2a6-45bc-a183-ee6666666666666666'
# 企业微信机器人的webhook
if result==1:
con={"msgtype": "text","text": {"content": "站点构建提醒\r\n构建站点:Developer\r\n构建结果:FAILURE\r\n构建失败,请您检查代码并重新构建,谢谢"},}
# else :
# con={"msgtype": "text","text": {"content": "developer构建结果:构建失败,请检查代码后重试!"},}
jd=json.dumps(con).encode('utf-8')
req=urllib.request.Request(url,jd)
req.add_header('Content-Type', 'application/json')
response=urllib.request.urlopen(req)
if __name__ == '__main__':
jobCurrentNumber=getNextNumber() #获取当前构建number
# print (jobCurrentNumber)
# myDict=getDict()#获取同事所有联系方式
#获取当前构建的目录比如D:\Jenkins\jobs\gk_check\builds\153,
path="C:\\Program Files (x86)\\Jenkins\\jobs\\Developer\\builds\\"+str(jobCurrentNumber)+"\\"
pathGitLab=path+"log" # 获取svn版本和id信息的文件路径
pathAuthor=path+"changelog.xml" # 获取递交者信息的文件路径
result=getResult() # 读取构建结果
# print (result)
jenkins(result) # 最后执行函数
getResult()
这里的企业微信的webhook地址我们可以在如下的地方添加机器人
这样就可以获得webhook的地址来进行来进行企业微信提醒
接下来我们在jenkins的构建模块进行构建后操作
ping 127.1 -n 5 >nul # 延迟5秒,目的是的等jenkins构建完成来获取结果
@echo off
D:
cd D:\test
start python developer_error.py #执行脚本
这里再简单说下curl 进行企业微信提醒
可以在构建最开始和结尾执行curl的命令
ios和Android的自动化构建结果也可以企业微信通知,如下图
还可以增加其他功能,等待大家去尝试,如果有什么问题或者创新想法大家可以说一哈
jenkins构建结果企业微信提醒的更多相关文章
- 让微信推送Jenkins构建消息
Jenkins作为开发必备之神器,各家大小公司都在使用.Jenkins自身内置了基于邮件推送构建结果的功能.但是随着移动互联网的发展,邮件这玩意已经越来越少使用了,是否有一种办法能把jenkins构建 ...
- [企业微信通知系列]Jenkins发布后自动通知
一.前言 最近使用Jenkins进行自动化部署,但是部署后,并没有相应的通知,虽然有邮件发送通知,但是发现邮件会受限于接收方的接收设置,导致不能及时看到相关的发布内容.而由于公司使用的是企业微信,因此 ...
- 使用gitlab ci构建IOS包并发送通知消息到企业微信
在之前的文章中,我们介绍了使用gitlab ci构建Android包的方法.今天我们介绍使用gitlab ci如何构建IOS包,并且在打包成功或者失败时,如何将消息通知到企业微信. 如果对gitlab ...
- Jenkins持续集成企业实战系列之Jenkins手动构建-----04
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...
- MoChat - 国内首款完全开源的 PHP 企业微信管理系统正式发布
MoChat -- 让企业微信开发更简单 项目地址 Github: https://github.com/mochat-cloud/mochat Gitee: https://gitee.com/mo ...
- Python3调用企业微信用于告警
前段时间利用py爬虫抓取一些网页信息,然后通过wxpy发送到微信群,以用作日常告警,感觉还是很方便. 但好景不长,我的小号微信被腾讯封了(很常见咯), 显示无法登录网页版微信,至今已经有半个多月了. ...
- Docker:使用Jenkins构建Docker镜像
Docker 彭东稳 1年前 (2016-12-27) 10709次浏览 已收录 0个评论 一.介绍Jenkins Jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从 ...
- Jenkins构建持续集成
Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变得可能.现在软件开发追求的是效率以及质量,Jenkins使得自动化成为可能! 亮点 采用shell自定义脚本,控制 ...
- Jenkins持续集成企业实战系列之Jenkins插件下载及邮件配置-----05
注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. 最初接触Jenkins也是由于公司需求,根据公司需求Java代码项目升级的.(公司是 ...
随机推荐
- PAT 乙级练习题1001 害死人不偿命的(3n+1)猜想 (15)
1001. 害死人不偿命的(3n+1)猜想 (15) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去, ...
- C++32位和64位常见类型的大小
32位 64位 char 1 1 int 4 大多数4,少数8 long 4 ...
- vue v-modle修饰符.number .trim
语法糖: 在不影响功能的情况下,添加某种方法实现同样的效果,从而方便程序开发. .number:可以将输入转换成Number类型,否则虽然输入的是数字,但它的类型其实是String. .trim:自动 ...
- java统计一个子串在指定字符串中出现的次数
今天查着用了用String类里的几个方法,分享下代码 题目要求:统计一个子串在指定字符串中出现的次数( 提示java字串出现了6次) public class SearchSameString { p ...
- vue 实现分页
1 新建 pager.js 文件 /** * [pagination 分页组件] * @param {Number} total [数据总条数] * @param {Number} display [ ...
- luoguP1288 取数游戏II [博弈论]
题目描述 有一个取数的游戏.初始时,给出一个环,环上的每条边上都有一个非负整数.这些整数中至少有一个0.然后,将一枚硬币放在环上的一个节点上.两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流 ...
- HTML之web项目的目录结构
文件夹树注解 htmls html一个文件放除去index.html外的其他页面文件. imgs 存放所有的图片文件:.png..jpg..jpeg.壁纸等. 示例:icon.png.ho ...
- Python每日一题 002
做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 在此生成由数字,字母组成的20位字 ...
- BZOJ 2597: [Wc2007]剪刀石头布(费用流)
传送门 解题思路 考虑全集-不能构成三元环的个数.如果三个点不能构成三元环,一定有一个点的入度为\(2\),继续扩展,如果一个点的度数为\(3\),则会失去3个三元环.对于一个点来说,它所产生的不能构 ...
- 模拟栈&&模拟队列
模拟栈:class Stack { private List list = new ArrayList( ); public void push( Object obj ) { this.list.a ...