环境python3.5+jenkins

# coding:utf-8
import urllib.request
import json
import sys
import time
import re class dingHook(object):
def __init__(self,sys):
self.msg = sys.argv[1:]
self.url = "https://oapi.dingtalk.com/robot/send?access_token=30eee8d20287b0051d7c25cc6e468dcdd01XXXX" def request(self, url, method, data=None, head={}):
request = urllib.request.Request(url=url, headers=head)
request.get_method = lambda: method
httpRes = urllib.request.urlopen(request, data)
content = httpRes.read()
httpRes.close()
return content def post_start(self):
data = {}
data["msgtype"] = "text"
data["text"] = {}
data["text"]["content"] = " jenkins:开始执行{}自动化......".format(self.msg[0])
data = json.dumps(data).encode(encoding='UTF8')
head = {"Content-Type": "application/json"}
content = self.request(self.url, "POST", data, head)
print(content)
return content def post_link(self, text, title, picurl="", messageurl=""):
data = {}
data["msgtype"] = "link"
data["link"] = {}
data["link"]["text"] = text
data["link"]["title"] = title
data["link"]["picUrl"] = picurl
data["link"]["messageUrl"] = messageurl
data = json.dumps(data).encode(encoding='UTF8')
head = {"Content-Type": "application/json"}
content = self.request(self.url, "POST", data, head)
print(content)
return content def post_result(self):
i = 0
result = "FAILURE"
# 获取当前jenkins构建版本号
get_buildnum = r"C:\Users\ASUS\.jenkins\jobs\{}\nextBuildNumber".format(self.msg[0])
with open(get_buildnum, encoding='utf-8') as fd:
num = fd.read()
buildNumber = str(int(num)-1)
print(buildNumber)
# 获取jenkins自动化执行结果
get_buildresult = r"C:\Users\ASUS\.jenkins\jobs\{}\builds\{}\log".format(self.msg[0], buildNumber)
# with open(get_buildresult) as output_result:
# print("result:",output_result.name)
# build_result = output_result.read()
#获取结果报告中的返回结果
name_re = r'\\Report\\report\\(.*?.html)'
with open(get_buildresult ) as fd:
log_content = fd.read()
html_name = re.findall(name_re, log_content)
get_RF_result = r'C:\Users\ASUS\.jenkins\jobs\{}\htmlreports\HTML_Report\{}'.format(self.msg[0], html_name[0])
print(get_RF_result)
# jenkins自动化结果报告地址
messageurl = "http://localhost:8080/job/{}/HTML_Report" .format(self.msg[0])
# 钉钉结果报告消息图片
picurl = "D:/work/ClTest/pased.jpg"
picurl = "http://localhost:8080/job/{}/HTML_Report/pased.jpg".format(self.msg[0])
# 钉钉结果报告标题
title = "【%s】执行结果" % self.msg[0]
print(title)
try:
with open(get_buildresult ) as fd:
build_result = fd.read()
#防止生成报告没这么快,报错时先等待5s
if "No such file or directory" in build_result:
time.sleep(5) #判断jenkins自动化是否执行结束
if "Finished" in build_result:
with open(get_RF_result,encoding='UTF-8' ) as fd:
output_rf_result = fd.read()
result = r'<h2>Results</h2>'
failure_index = output_rf_result.find(result)
result_content = output_rf_result[failure_index:]
print(result_content)
failure_api = re.findall(r'<td[^>]*>(.*?)</td>', result_content,re.I|re.M)
print(failure_api)
failure_api = ["- " + a + '\n\n' for a in failure_api] for a in failure_api:
if 'Failed' in a:
result = " {}自动化执行失败!\n".format(self.msg[0])
print(a)
content = self.post_link(text=result, title=title, messageurl=messageurl, picurl=picurl)
return content
result = "{}自动化执行成功!\n".format(self.msg[0])
content = self.post_link(text=result, title=title, messageurl=messageurl, picurl=picurl)
return content
# fail_case = int(case_count_list[1])
# suc_case = int(case_count_list[3])
# if fail_case == 0:
# result = "SUCCESS-成功:%d-失败:%d" % (suc_case,fail_case)
# else:
# result = "FAILURE-成功:%d-失败:%d" % (suc_case,fail_case)
except Exception as e:
print(e)
time.sleep(10) def ding_hook(self, itype="start"):
if itype == "start":
self.post_start()
elif itype == "end":
self.post_result() if __name__ == '__main__':
dh = dingHook(sys)
print(dh.ding_hook(sys.argv[2]))

  运行命令:python urllib-test.py 工程名 end

问题:TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.

data = json.dumps(data)这行后加个.encode(encoding='UTF8')

Python自定义钉钉机器人发送自动化结果报告的更多相关文章

  1. 钉钉自定义机器人 发送文本 换行 \n无效果

    今天用php做钉钉自定义机器人 发送文本 换行 \n无效果,原来是我一直用单引号作为定义字符串,换成双引号就ok了.

  2. 钉钉机器人集成Jenkins推送消息模板自定义发送报告

    一.由于公司同样也使用了钉钉.那么在做Jenkins集成自动化部署的时候,也是可以集成钉钉的. 那种Jenkins下载钉钉插件集成,简单设置就可以完成了.我们今天要做的是,定制化的发送消息. 钉钉推送 ...

  3. python 钉钉机器人发送消息

    import json import requests def sendmessage(message): url = 'https://oapi.dingtalk.com/robot/send?ac ...

  4. 用Python实现阿里钉钉机器人读取数据库内容自动发群通知

    最近想把一些预警数据信息按照一定的要求自动发送到移动端APP,最终把目标放在了腾讯的微信和阿里的钉钉软件上,由于刚开始学习python,于是编程工具想用python来实现.微信使用群体最广,通过一天的 ...

  5. 怎么用python 3 开发钉钉群机器人

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:Python绿色通道 PS:如有需要Python学习资料的小伙伴可以加 ...

  6. 钉钉 机器人接入 自定义webhook

    钉钉出了个webhook机器人接入,自定义的机器人支持随时post消息到群里: 昨天就尝试着用C#写了个: 一开始用python写,但是莫名的提示  {"errmsg":" ...

  7. python 小脚本升级-- 钉钉群聊天机器人

    一则小脚本(工作中用) 在这篇文章中写的监控的脚本,发送监控的时候 是利用的邮箱,其实在实际,邮箱查收有着不方便性,于是乎升级, 我们工作中,经常用钉钉,那么如果要是能用到钉钉多好,这样我们的监控成功 ...

  8. 钉钉自定义机器人配合SVN钩子事件进行消息的推送实践

    目前很多公司还是使用SVN(TortoiseSVN)进行版本控制,使用简单,适合管理一般项目.协同办公软件目前钉钉比较成熟,阿里也一直在宣传推广,这两年公司也在使用,主要用于信息的沟通,其它的绩效.考 ...

  9. 使用python对mysql主从进行监控,并调用钉钉发送报警信息

    1.编写python的监控脚本 A.通过获取mysql库中的状态值来判断这个mysql主从状态是否正常 B.进行两个状态值的判断 C.进行调取钉钉机器人,发送消息 2.设置定时任务进行脚本运行 cro ...

随机推荐

  1. ACM_尿裤子

    Problem Description: 小X上课的时候喝了一大壶水,午饭后他极限跑回宿舍上厕所,结果发现不知道哪个逗比舍友在宿舍门上加了一把4位密码锁,然后还留了纸条:密码是6666,小X只能一个一 ...

  2. Coursera公开课-Machine_learing:编程作业2

    第三周编程作业:Logistic Regression 代码包在gitlab上:https://gitlab.com/luntai/Machine_Learning

  3. [转]Android定时刷新UI界面----Handler

    本文转自:http://blog.csdn.net/macong01/article/details/7479266 本想做一个软件可以对UI界面进行定时更新,找了一些资料,先贴一个简单的定时更新界面 ...

  4. easyui datagrid 高度布局自适应

    最近在把以前写的一个项目改成用easyui做前端.过程中遇到了不少问题.其中一个就是datagrid不能很好的布局.想了好多办法都有局限.最后想到会不会是布局(easyui-layout)的问题,经过 ...

  5. Spring Cloud (6) 分布式配置中心-高可用

    高可用 现在已经可以从配置中心读取配置文件了,当微服务很多时都从配置中心读取配置文件,这时可以将配置中心做成一个微服务,将其集群化,从而达到高可用. 改造config-server 加入eureka ...

  6. microsoft ajax registered - to fix microsoft ajax update panel post back

    <dnn:DnnScriptBlock runat="server">     <script type="text/javascript"& ...

  7. Redis 之消息发布与订阅(publish、subscribe)

    使用办法: 订阅端: Subscribe 频道名称 发布端: publish 频道名称 发布内容 一般做群聊,聊天室,发布公告信息等.

  8. gitlab 第1次提交代码到1个新仓库

    1.如果是本地刚刚搭建好git环境,第一次和gitlab服务器产生连接 参照这个文 https://www.cnblogs.com/kaerxifa/p/10929098.html 2.已经和gitl ...

  9. jquery 对 table 的操作

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...

  10. How To: Multipath Linux x86-64 Release 6.4

    [root@node01 ~]# lsb_release -a LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0 ...