前言:每当jenkin在构建之后我们想把构建结果SUCCESS/FAILURE或者其他信息通知给其他人,我这里的环境邮件提醒的话所被通知者并不会第一时间去阅读,所以我们用“钉钉”,“企业微信”来第一时间去通知你想通知的小伙伴们。

因为我这里的环境用的是企业微信所以本文都是基于企业微信来说的,不过在钉钉上也可以使用,也可以利用钉钉在jenkins上的插件,那样更方便些。

进入正题

一、日志文件获取

我们要获得jenkins的构建结果是SUCCESS还是FAILURE是需要jenkins构建完毕才能获取到的,那么我们从哪里能获得构建结果以及其他信息呢?

我们可以用日志信息或者api的构建信息来获取

我们 我们可以用日志信息或者api的构建信息来获取,这里我们是基于查看日志来查看构建结果以及其他信息,我这里以windows环境以及jenkins默认安装环境来举例

每一次日志文件的位置我们可以在如图位置找到

我们去最后一次构建结果查看日志文件

在结果查看构建结果是否成功

二、PYTHON脚本推送通知

那么我们可以用python来写个读取结果的脚本,用jenkins来自动运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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的构建模块进行构建后操作

1
2
3
4
5
ping 127.1 -n 5 >nul     # 延迟5秒,目的是的等jenkins构建完成来获取结果
@echo off
D:
cd D:\test
start python developer_error.py #执行脚本

这里再简单说下curl 进行企业微信提醒

可以在构建最开始和结尾执行curl的命令

ios和Android的自动化构建结果也可以企业微信通知,如下图

还可以增加其他功能,等待大家去尝试,如果有什么问题或者创新想法大家可以说一哈