addproject

This commit is contained in:
qiaoxinjiu
2026-01-22 19:10:37 +08:00
commit 6994b185a3
184 changed files with 21039 additions and 0 deletions

View File

@@ -0,0 +1,141 @@
# -*- coding:utf-8 -*-
"""
功能:发送飞书消息接口
"""
import requests
import json
import logging
import time
import urllib3
urllib3.disable_warnings()
import os
from base_framework.public_tools.read_config import ReadConfig
try:
JSONDecodeError = json.decoder.JSONDecodeError
except AttributeError:
JSONDecodeError = ValueError
HERE = os.path.dirname(os.path.abspath(__file__))
msg_config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'msg_config.ini')
read_config = ReadConfig(filename=msg_config_path)
def get_feishu_config_options():
"""
功能:获取飞书配置文件信息
option_key:配置文件中的key
"""
return read_config.get_options('feishu_user_list')
def get_feishu_config_value(option_key):
"""
功能:获取飞书配置文件信息
option_key:配置文件中的key
"""
return read_config.get_value(sections='feishu_user_list', options=option_key)
def get_user_name_by_email_prefix(email_prefix):
"""
功能:获取飞书配置文件中的邮箱前缀与中文姓名的对应关系
email_prefix:邮箱前缀
返回:对应的中文姓名
"""
return read_config.get_value(sections='user_name', options=email_prefix)
class FeiShuMessage(object):
def __init__(self, team='TO', secret=None, pc_slide=False, fail_notice=False):
"""
机器人初始化
:param team: 业务组名用于从msg_config配置文件中读取对应群组的webhook地址
:param secret: 机器人安全设置页面勾选“加签”时需要传入的密钥
:param pc_slide: 消息链接打开方式默认False为浏览器打开设置为True时为PC端侧边栏打开
:param fail_notice: 消息发送失败提醒默认为False不提醒开发者可以根据返回的消息发送结果自行判断和处理
"""
super(FeiShuMessage, self).__init__()
self.headers = {'Content-Type': 'application/json; charset=utf-8'}
team_name = team.lower() + '_webhook_token'
if team_name in get_feishu_config_options():
token = get_feishu_config_value(option_key=team_name)
self.webhook = "https://open.feishu.cn/open-apis/bot/v2/hook/{0}".format(token)
else:
self.webhook = None
logging.error("Team: {} not in msg_config.ini".format(team))
return
self.secret = secret
self.pc_slide = pc_slide
self.fail_notice = fail_notice
def send_text(self, msg):
"""
消息类型为text类型
:param msg: 消息内容
:return: 返回消息发送结果
"""
data = {"msg_type": "text"}
if msg and self.webhook: # 传入msg非空
data["content"] = {"text": msg}
if "全部通过" in msg:
# 不用发飞书消息
logging.info("+++++++++ 全部构建成功,不发消息 ++++++++")
return False
return self.post(data)
def post(self, data):
"""
发送消息内容UTF-8编码
:param data: 消息数据(字典)
:return: 返回消息发送结果
"""
try:
post_data = json.dumps(data)
response = requests.post(self.webhook, headers=self.headers, data=post_data, verify=False)
except requests.exceptions.HTTPError as exc:
logging.error("消息发送失败, HTTP error: %d, reason: %s" % (exc.response.status_code, exc.response.reason))
raise
except requests.exceptions.ConnectionError:
logging.error("消息发送失败HTTP connection error!")
raise
except requests.exceptions.Timeout:
logging.error("消息发送失败Timeout error!")
raise
except requests.exceptions.RequestException:
logging.error("消息发送失败, Request Exception!")
raise
else:
try:
result = response.json()
except JSONDecodeError:
logging.error("服务器响应异常,状态码:%s,响应内容:%s" % (response.status_code, response.text))
return {'errcode': 500, 'errmsg': '服务器响应异常'}
else:
logging.debug('发送结果:%s' % result)
# 消息发送失败提醒errcode 不为 0表示消息发送异常默认不提醒开发者可以根据返回的消息发送结果自行判断和处理
if self.fail_notice and result.get('errcode', True):
time_now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
error_data = {
"msgtype": "text",
"text": {
"content": "[注意-自动通知]飞书机器人消息发送失败,时间:%s,原因:%s,请及时跟进,谢谢!" % (
time_now, result['errmsg'] if result.get('errmsg', False) else '未知异常')
},
"at": {
"isAtAll": False
}
}
logging.error("消息发送失败,自动通知:%s" % error_data)
requests.post(self.webhook, headers=self.headers, data=json.dumps(error_data))
return result
if __name__ == '__main__':
fs = FeiShuMessage(team='TO')
吴勇刚 = "<at user_id='ou_94f57439f58bde9376189a3cabb0b11a'>吴勇刚</at>"
刘明浩 = "<at user_id='ou_94f57439f58bde9376189a3cabb0b11b'>刘明浩</at>"
陈慧宗 = "<at user_id='ou_bc2b266b05a428959bfcff3378af2d36'>陈慧宗</at>"
message = "【TO-SMOKING_NEW】 第【1314】次构建结果失败【5】个 \n|--{}: 1个\n|--{}: 2个\n|--{}: 3个" \
"构建报告:...........test..........".format(吴勇刚, 刘明浩, 陈慧宗)
resp = fs.send_text(msg=message)
print(resp)

View File

@@ -0,0 +1,101 @@
# encoding: utf-8
# @Time : 2021/12/20 18:14
# @Author : yk
# @Site :
# @File : jira_message_by_ding.py
from jira import JIRA
import json
import requests
import datetime
import urllib.parse
class JiraObj:
def __init__(self, user, pwd, jira_addr):
if not hasattr(JiraObj, 'jira'):
JiraObj.jira_obj(user, pwd, jira_addr)
@staticmethod
def jira_obj(user, pwd, jira_addr):
JiraObj.jira = JIRA(auth=(user, pwd), options={'server': jira_addr})
@staticmethod
def search_by_jql(jql, fields=None):
return JiraObj.jira.search_issues(jql, fields=fields, maxResults=-1, json_result='true')
def get_delay_sub_task_creator(jira_obj, now_date):
name_list="chengpu,fengtian,dengzhenbo,guosongchao,handongtang,huanghaifeng,lidaijun,wanglushun,wangyujie02,yangwenlei01,yangwenlei01,zhanghaodong,zhengxin01,zhuzipeng"
# name_list="zhanghaodong"
jql = 'issuetype = 缺陷 and createdDate < \'{} 18:00\' AND status not in (QA测试,SIM验证,Done,关闭,待测试) and assignee in ({})'.format(
now_date,name_list)
fields = 'assignee'
print(jql)
issue_list = jira_obj.search_by_jql(jql, fields).get('issues')
print(issue_list)
if issue_list:
return list(map(lambda x: x.get('fields').get('assignee').get('name'), issue_list))
else:
return None
def send_message_by_feishu(name, message):
data={"list":[name]}
a=requests.post(url="http://sqe.qc.huohua.cn:8082/feishu/getUserIds",data=data)
print(a.text)
open_id=a.text.split("open_id")[1].split('"')[2].split("\\")[0]
data={
"app_id": "cli_a2d926427f39900d",
"app_secret": "CvETCGh3rHu6CtcnxzaWK7rMnVgcSLED"
}
a=requests.post(url="https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal",json=data)
tenant_access_token=eval(a.text)["tenant_access_token"]
data ={"msg_type": "text","content": { "text": "{}".format(message) }, "open_ids": [open_id]}
header={"Authorization":"Bearer {}".format(tenant_access_token),"Content-Type":"application/json; charset=utf-8"}
a=requests.post(url="https://open.feishu.cn/open-apis/message/v4/batch_send/", json=data,headers=header)
print(a.text)
if __name__ == '__main__':
now_date = datetime.datetime.now().strftime('%Y-%m-%d')
jira_obj = JiraObj('yaokun', 'Cyjayk1314', 'https://jira.bg.huohua.cn')
creator = get_delay_sub_task_creator(jira_obj, now_date)
if creator:
creator=list(set(creator))
message="你还有未解决的bug请及时解决若已解决请及时更新jira状态"
for i in creator:
jql = 'issuetype = 缺陷 and createdDate < \'{} 18:00\' AND status not in (QA测试,SIM验证,Done,关闭,待测试) and assignee in ({})'.format(
now_date, i)
print(jql)
i=i+"@sparkedu.com"
a=jira_obj.search_by_jql(jql, "assignee").get('issues')
for j in a:
print(j["key"])
send_message_by_feishu(i,"你有未修复的bug请及时修复https://jira.bg.huohua.cn/browse/{}".format(j["key"]))
# send_message_by_feishu("yaokun@sparkedu.com","https://jira.bg.huohua.cn/browse/HHC-50790")
# data={"list":["yaokun@sparkedu.com"]}
# a=requests.post(url="http://sqe.qc.huohua.cn:8082/feishu/getUserIds",data=data)
#
# print(a.text.split("open_id")[1].split('"')[2].split("\\")[0])
# open_id="ou_95feb664191332a7916bb3b0d886f553"
# print(a.text)
# data={
# "app_id": "cli_a2d926427f39900d",
# "app_secret": "CvETCGh3rHu6CtcnxzaWK7rMnVgcSLED"
# }
# a=requests.post(url="https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal",json=data)
# print(a.text)
#
# data ={"msg_type": "text","content": { "text": "https://jira.bg.huohua.cn/browse/HHC-50790" }, "open_ids": [open_id]}
#
# header={"Authorization":"Bearer t-719d260f474e6a1a6b4a5d990a6bccec6fc3b17f","Content-Type":"application/json; charset=utf-8"}
# print(data)
# a = requests.post(url="https://open.feishu.cn/open-apis/message/v4/batch_send/", json=data,headers=header)
# print(a.text)

View File

@@ -0,0 +1 @@
# to be add 。。。。

View File

@@ -0,0 +1,236 @@
# 此文档中配置钉钉,飞书群组和群用户信息
[feishu_user_list]
JENKINS_webhook_token = 6de2e886-10de-4a85-aa92-2d7446d0c315
CDQA_webhook_token = 30e400ed-b802-4afb-b38c-2a0690c1a2a6
TO_webhook_token = 2109acc2-6ffe-4038-8bf1-4bfcfcd4cb01
TMO_webhook_token = 2109acc2-6ffe-4038-8bf1-4bfcfcd4cb01
HHI_TO_webhook_token = 2109acc2-6ffe-4038-8bf1-4bfcfcd4cb01
HHI_TMO_webhook_token = 2109acc2-6ffe-4038-8bf1-4bfcfcd4cb01
GUE_webhook_token = a46a610c-4c52-4abf-bcad-5fde5cd545e4
LALIVE_webhook_token = 3f9379c7-ebcd-4844-9c61-3f2642f64df4
H2R_webhook_token = 3f9379c7-ebcd-4844-9c61-3f2642f64df4
CC_webhook_token = 3f9379c7-ebcd-4844-9c61-3f2642f64df4
ASTWB_webhook_token = 31ab2e27-df7c-46d6-8294-afb98a68b6f0
ASOPE_webhook_token = 31ab2e27-df7c-46d6-8294-afb98a68b6f0
ASTOP_webhook_token = 31ab2e27-df7c-46d6-8294-afb98a68b6f0
ES_webhook_token = 84b165e1-160f-4ebd-a36d-d1873cca0d20
SCM_webhook_token = 84b165e1-160f-4ebd-a36d-d1873cca0d20
UBRD_webhook_token = a46a610c-4c52-4abf-bcad-5fde5cd545e4
DBSYNC_webhook_token = 054f4c3c-b38b-46f8-9cc4-d9660e205fc7
ODS_webhook_token = 054f4c3c-b38b-46f8-9cc4-d9660e205fc7
AUTOMATION_webhook_token = ceb41bf3-f3ce-433f-bbea-2960bf46a819
; TO-RD_webhook_token = d8d9ac4b-e5f9-47a6-8810-0ae6b621a7cb
TO-RD_webhook_token = 2387b345-3675-49dd-971a-2f81b98e3ed1
TO-FE_webhook_token = 1d0dac58-dd68-412d-a2eb-b445927339a
GUE-RD_webhook_token = 8951949c-e300-4c96-a725-53346309851a
USER-FE_webhook_token = 4f946e2b-0b58-4eb5-aa22-3d3516aee1ba
SCM-RD_webhook_token = 74ceedc8-510f-4efd-bf64-4c5e6e87dc0f
SCM-monitor_webhook_token = b821c1e5-63b0-42c9-b7ff-ab89c6dcd076
PB_webhook_token = 84b165e1-160f-4ebd-a36d-d1873cca0d20
INFO_webhook_token = 20114e9a-9f09-44f9-bfbe-0da382745cde
CODING_webhook_token = 20114e9a-9f09-44f9-bfbe-0da382745cde
OFFLINE_webhook_token = 20114e9a-9f09-44f9-bfbe-0da382745cde
陈林 = ou_69254b2555a2c6257d5ca45d885f785e
吴勇刚 = ou_94f57439f58bde9376189a3cabb0b11a
陈慧宗 = ou_bc2b266b05a428959bfcff3378af2d36
胥雯筠 = ou_04e4a3ccf680acc17f1039dd57349a00
陈江 = ou_02ce6ebcb8a510c0b4102e15aaf59d05
谯新久 = ou_c3c6f7ac7997000dcb23e634a830851d
罗洪 = ou_f6981cb788d066accae770fda5fa7ee5
刘睿权 = ou_218303e87f4c45ff81ed16a1e1d0b1ee
陈典模 = ou_0fe84f418974af89e89148e2380427dd
李聪 = ou_711ebaac08461ae9a2726fcbe393d7de
左其灵 = ou_cc27134156714d88da23e159ba8390e1
宋飞飞 = ou_ccafa6ebe0194e42ea55f8804734e6d4
付文龙 = ou_589b7151ac583ca3d94f0fb2d579f282
赵晓放 = ou_a62ef7960b9c57e1946f55a6bb5d8b35
张浩东 = ou_04ba397251c63036e9d75096f3c28704
王玉杰 = ou_e3198cbf59327bac7dd686a94af30c2a
冯天 = ou_3522b9c4015645ea2d4c36aa6c260e90
郭松超 = ou_6a8e6ccaceb51167c4745b347085edd9
张雄 = ou_1ab263e2e7386fd5c5ecd67c1c6f2b6d
刘学刚 = ou_a17ade671a3030f12ae0fa13cc4f82bc
朱亮 = ou_0cc7a4c1a97bb58dd188b6aac6c7569b
高志军 = ou_5df6937cc109565f92868f0cdca4906c
马锦程 = ou_d35f2668f960300ee2d9a7768c7de9ce
刘英杰 = ou_d62d587ce3960add08214726897c228d
张晓刚 = ou_320976aaeb1e50976932f2eb446918c7
赵飞 = ou_17fdcc65d985a21a225034db318308bf
刘信林 = ou_dec1cf51c8b3e63823e7262928b20dbb
叶飞 = ou_3559e23c390a60a59f4b10e7053e5551
向明 = ou_4c26b3066017f57f6f2658b49e16b8a5
姜浩 = ou_8014499bb65adda6399ebc82e1a46724
姜灵敏 = ou_e4e113c845e88a43125c8a994710ff94
徐长乐 = ou_54c5d0f98d26ab7500a5af64d9022b1b
卿晨 = ou_3e517c22dbcdfce4b4e75af20a7e5d8c
李柏成 = ou_e40510cf340bc5ac0f860ac01844f1a1
苟宇恒 = ou_d82652fb433a470d7ac72a542292cd3b
董吉祥 = ou_4d9d1b8cf8c743f75313863a3ac336ad
白杨 = ou_ac886a59ffd1a4a0da4cb3d06c1e7b03
李明泽 = ou_0fc5af64989a1677fa4c34b7542e4c2c
沈佳坤 = ou_36ed516d812a1bacc3f978179e32910d
朱乾元 = ou_31a10ecba1074d45df6c6cbb13ec16e9
顾洋 = ou_543fe7b50e1cadf6974e93ac8663b09d
吴优 = ou_117b8d43a8122021d290ef89cbcb9c88
王亚超 = ou_649286a2b30bfe81bb4041a2b617fd80
徐佳林 = ou_f382da52d42932870a0ea122753f795a
彭霞 = ou_9ef2d9e4a5c098ab27933208dd95ff8a
通用 = ou_abcdefghijklmnopqrstuvwxyz123456
韩东堂 = ou_4ff52d71cb3cbe7cd1f26b2ac7da5eb0
邓振博 = ou_994af7ca097ea1b63a5bec13b0b9a42c
朱子朋 = ou_8d13121890e1de3851c0616b8392cb1f
李代军 = ou_279bbc6d368cffa743c959d7461d8481
黄海峰 = ou_8a4cf96dfc173dbed704d44fdc8fc5c1
杨文磊 = ou_885d10cea3c3ae72c380971a7082da06
卢纪霖 = ou_eaaf66ef5c53d3977a0bd3961376beae
杨远宁 = ou_8693a6f29fe174b4d18155e6d4da0396
崔瑞 = ou_7bbb7b678b07e74fd1c245bafc6877f9
李振宇 = ou_82a619af1d592dfb994ee28389815ee9
王同刚 = ou_ca8ea6ff6bf6258f49932dc4b0c98fbc
张瑞涛 = ou_ca355f3fad90fe934087d225bb5794b4
左钊 = ou_ea9a364cffa235aec88d37d075e300bb
田翔 = ou_75796572af14c996f853f015ecb788e0
赵加会 = ou_33ed201f4e7f0f8919bc7021130c066e
刘欣畅 = ou_6247db29c46ac536d2aa10fab9711a82
田文昌 = ou_60e01001facaadd78b89ef05281e0763
郑宇翔 = ou_4e8d677a2389a8f8a5517961f2423970
王国静 = ou_862b663bac7be9762eb78d71a9e6defb
李其 = ou_cfb094d4d15f7da729eea8b1491ffd13
尚万中 = ou_53e6edbf2ef8a1620cbadb4b7efeb966
张景峰 = ou_48c88a2ff129e5d23215d245c6b82fc0
[user_name]
fuwenlong = 付文龙
fengtian = 冯天
guosongchao = 郭松超
wangyujie02 = 王玉杰
zhanghaodong = 张浩东
zhuliang = 朱亮
liuxuegang = 刘学刚
gaozhijun = 高志军
majincheng = 马锦程
zhaoxiaofang = 赵晓放
liuyingjie = 刘英杰
zhangxiaogang = 张晓刚
zhaofei = 赵飞
liuxinlin = 刘信林
yefei = 叶飞
xiangming = 向明
jianghao = 姜浩
jianglingmin = 姜灵敏
xuchangle = 徐长乐
qingchen = 卿晨
libaicheng = 李柏成
gouyuheng = 苟宇恒
jixiang.dong = 董吉祥
baiyang01 = 白杨
wuyonggang = 吴勇刚
xuwenjun = 胥雯筠
songfeifei = 宋飞飞
wanggang02 = 王刚
lichao04 = 李超
xiexiangyi = 谢祥益
denghaiou = 邓海鸥
yaokun = 姚坤
chenhuizong = 陈慧宗
yuanzhengqi = 袁正旗
luohong = 罗洪
chendianmo = 陈典模
licong = 李聪
zuoqiling = 左其灵
zhengxin01 = 郑新
handongtang = 韩东堂
dengzhenbo = 邓振博
zhuzipeng = 朱子朋
lidaijun = 李代军
huanghaifeng =黄海峰
yangwenlei01 =杨文磊
lujilin = 卢纪霖
yangyuanning = 杨远宁
cuirui = 崔瑞
lizhenyu = 李振宇
wangtonggang = 王同刚
zhangruitao01 = 张瑞涛
zuozhao = 左钊
tianxiang = 田翔
zhaojiahui = 赵加会
liuxinchang = 刘欣畅
tianwenchang = 田文昌
zhengyuxiang = 郑宇翔
zhangxiong = 张雄
wangguojing = 王国静
liqi03 = 李其
shangwanzhong = 尚万中
zhangjingfeng = 张景峰
limingze = 李明泽
zhuqianyuan = 朱乾元
guyang = 顾洋
shenjiakun = 沈佳坤
wuyou = 吴优
[dingding_user_list]
SCM_owner = 13350956802
景虎成 = 13350956802
文妮 = 17302811505
罗洪 = 13550629276
TO_owner = 18215530124
李超 = 18011454607
吴勇刚 = 13540133074
王刚 = 19141999584
刘明浩 = 18380450039
谢祥益 = 18010623985
唐其麟 = 18011454607
肖淇迈 = 19141999584
唐浩 = 18380450039
TMO_owner = 18215530124
姚坤 = 18215530124
罗志鹏 = 18582482272
刘涛婷 = 18328504751
陈江 = 13458500234
ASTWB_owner = 18202810506
谯新久 = 18202810506
刘鹏 = 13547858402
杨雨 = 13608006659
华学敏 = 13708231975
ASORG_owner = 18202810506
PZ_owner = 18202810506
肖亮 = 18108096240
ASTOP_owner = 18780106567
ASOPE_owner = 18180956201
蒋安龙 = 18180956201
杨中莲 = 13882105134
CC_owner = 18215530124
林于棚 = 18782019436
黄业宏 = 18603267203
EN_owner = 18180956201
LALIVE_owner = 18215530124
H2R_owner = 18380448416
胥雯筠 = 18780106567
周仁华 = 18281029023
袁正旗 = 18030895120
刘睿权 = 15681935823
文青 = 18584851102
刘德全 = 13402829590
包利 = 18380448416
ASTOP_to_dd = 495fc7e0171e829acda91ffa08eaf37307e123fafc090249b633eb651c31dd79
ASTWB_to_dd = 2079cb3e311ab6a37138a6d4671181661d211c12a1532c2012ae7e6b397996c3
ASOPE_to_dd = 147617cea7e1b480e54cecb6dfd33edb5a9ed872e1bab52007d488673ad8ab0f
ASORG_to_dd = 2079cb3e311ab6a37138a6d4671181661d211c12a1532c2012ae7e6b397996c3
CC_to_dd = ccceb513dbc7120dc301fa38a2f634b861009ec54d424d293653dc15c6e4963f
H2R_to_dd = ccceb513dbc7120dc301fa38a2f634b861009ec54d424d293653dc15c6e4963f
LALIVE_to_dd = ccceb513dbc7120dc301fa38a2f634b861009ec54d424d293653dc15c6e4963f
TMO_to_dd = ccceb513dbc7120dc301fa38a2f634b861009ec54d424d293653dc15c6e4963f
TO_to_dd = ccceb513dbc7120dc301fa38a2f634b861009ec54d424d293653dc15c6e4963f
UBRD_to_dd = ccceb513dbc7120dc301fa38a2f634b861009ec54d424d293653dc15c6e4963f
ULS_to_dd = ccceb513dbc7120dc301fa38a2f634b861009ec54d424d293653dc15c6e4963f
SCM_to_dd = 38fc76120cb204e2c1da53ec9921805670466da64c37aed8bc6fba0513f5688b