环境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. Android 控制硬加速 hardwareAccelerated

    从Android3.0 (API level11)开始,Android的2D显示管道被被设计得更加支持硬加速了.硬加速使用GPU承担了所有在View的canvas上执行的绘制操作. 启用硬加速最简单的 ...

  2. 如何修改wampserver中mysql中字符编码的解决方案

    因为我用的一般都是utf8,所以有必要改一下: 打开mysql控制台,输入密码登录之后,执行命令: show variables like ‘%char%’; 注意引号的中英文格式以及最后面的分号不要 ...

  3. win32之bitmap篇

    先讲一下LoadBitmap的用法,代码如下: PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd,&ps); HDC hMemDC = CreateCompa ...

  4. ES6学习之箭头函数

    ES6学习笔记--箭头函数 箭头函数一直在用,最近突然想到重新看一下箭头函数的用法,所以这里做一些总结. 箭头函数长这个样子: let fn = a => a++; // fn 是函数名, a= ...

  5. 如何描述bug

    清晰的标题 环境描述 已经采取了什么措施 结果 日志 Coredump 截图

  6. 4星|《超级技术:改变未来社会和商业的技术趋势》:AI对人友好吗

    超级技术:改变未来社会和商业的技术趋势 多位专家或经济学人编辑关于未来的预测,梅琳达·盖茨写了其中一章.在同类书中属于水平比较高的,专家只写自己熟悉的领域,分析与预测有理有据而不仅仅是畅想性质. 以下 ...

  7. Spring学习笔记_day01_ioc

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! Spring_day01 spring是一站式的框架, ...

  8. kernel memory code learn

    mem alloc page Noticeble: 1. there are two kind of page: virtual page, physical page. 2. the page st ...

  9. luogu P1775 古代人的难题_NOI导刊2010提高(02)(斐波纳契+数学)

    题意 已知x,y为整数,且满足以下两个条件: 1.x,y∈[1…k],且x,y,k∈Z 2.(x^2-xy-y^2)^2=1 给你一个整数k,求一组满足上述条件的x,y并且使得x^2+y^2的值最大. ...

  10. TensorFlow 学习笔记(1)----线性回归(linear regression)的TensorFlow实现

    此系列将会每日持续更新,欢迎关注 线性回归(linear regression)的TensorFlow实现 #这里是基于python 3.7版本的TensorFlow TensorFlow是一个机器学 ...