环境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. Python--10、生产者消费者模型

    生产者消费者模型(★) 平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度.程序中有两类角色:生产数据.消费数据实现方式:生产->队列->消费. 通过一个容器来解决生产者和消费 ...

  2. Android彻底组件化方案实践

    本文提出的组件化方案demo已经开源,参见文章Android彻底组件化方案开源. 文末有罗辑思维"得到app"的招聘广告,欢迎各路牛人加入!! 一.模块化.组件化与插件化 项目发展 ...

  3. html5——过渡

    transition:1.开始状态   2.终止状态    3.过渡属性 transition: width 2s, background-color 2s;//属性,时间 transition: a ...

  4. android studio 控件提示大写

    方法一: 在第一行找到File进入找到setting,找到code completion 右侧复选框 选择-->None—->ok 方法二:<item name="andr ...

  5. mysql_基础1

    初学mysql,感觉挺有意思的. mysql指令的一些参数: promrt修改提示符:   PROMPT \D mysql的语法规范: 一些函数: 创建数据库: SHOW CREATE DATABAS ...

  6. Lua之尾调函数的用法

    Lua之尾调函数的用法 --当函数的最后返回结果调用另一个函数,称之为尾调函数 function f(x) return g(x) end --由于“尾调用”不会耗费栈空间,所以一个程序可以拥有无数嵌 ...

  7. C++字符串处理函数

    #include<iostream> #include<stdlib.h> #include<string> #include <assert.h> u ...

  8. 使用 Cordova 打包 app

    1.安装nodejs 2.安装 cordova npm install -g cordova 3.Cordova 打包成安卓APK需要用到ANT打包工具,首先配置好java环境: 下载安装Java J ...

  9. C#学习笔记_14_接口&命名空间

    14_接口&命名空间 接口 一系列规范 语法: 如果一个类的后面既有父类也有接口,那么一定是父类在前,接口靠后 一个类可以实现多个接口 规范:接口命名以大写字母 I 开头 接口中可以包含接口方 ...

  10. 第十节:numpy之数组文件操作

    1.安装ipython 2.创建txt文件 3.直接上代码: