目录
1、前言
代码部署,需要人为监控,如果是自动部署,没有人监控时,部署情况如何,不得而知,所以我们可以写一个实时部署通知,使用企业微信
2、思路
在企业微信建立一个应用,为接收消息的载体,添加相关人员
在Python中实现得到企业微信应用token,格式化Jenkins消息并发送消息
Jenkins使用Shell命令执行Python代码文件
3、企业微信操作
1、获取企业微信的企业ID
2、创建应用
3、得到AgentId、Secret
进入新建的应用详情页面,可以得到这两个字段
4、Jenkins配置
1、将代码py文件放到jenkins构建工程的workspace的根目录下
2、配置构建执行Shell命令
5、代码
全部为Python基础代码,学习起来不难,所以注释不是很多。
json,time,sys是Python基础库,无须下载
需要下载一个requests库,可以在CMD里使用命令:pip install requests 下载
import requests
import json
import time
import sys
#定义时间格式
TIMEFORMAT = "%Y-%m-%d %H:%M:%S"
#得到当前时间
def getNowTime():
nowtime = time.strftime(TIMEFORMAT, time.localtime(time.time()))
return nowtime
"""
企业微信通道
"""
class SendwechatMsg(object):
def __init__(self):
"""
初始化企业微信相关权限字段
注:
corpid是企业ID,获取路径,登录企业微信官网---我的企业---最底部可寻到
corpsecret是自建应用的Secret
agentid是自建应用的AgentId
这两个参数在 应用管理---自建(新建一个应用)---进入此应用,正文顶部可寻到
下面三个参数的值是假的,需要去企业微信获取真实参数
"""
self.corpid = 'wwa1sdfsdkk4fc7457'
self.corpsecret = 'cwerwhn-Sq54__ISKDFiewowfwie0__Xj9fBiiejfiweowNYE'
self.agentid = '1000021'
def getToken(self):
"""
获取企企业微信应该的token
"""
if self.corpid is None or self.corpsecret is None:
return False, '企业微信相关信息未配置'
url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid='+ self.corpid +'&corpsecret='+ self.corpsecret
response = requests.get(url)
res = response.json()
self.token = res['access_token']
return True, '企业微信token获取成功'
def sendMsg(self, msg):
"""
发送消息方法
msg:需要发送的消息
"""
_isOK, result = self.getToken()
if _isOK:
url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + self.token
jsonmsg = {
"touser" : "@all",
"msgtype" : "text",
"agentid" : self.agentid,
"text" : {
"content" : msg
},
"safe":0
}
data = (bytes(json.dumps(jsonmsg), 'utf-8'))
requests.post(url, data, verify=False)
else:
print(result)
"""
Jenkins消息格式化
"""
class Jenkins(object):
def __init__(self):
"""
初始化微信消息通道
"""
self.wechatMsg = SendwechatMsg()
def sendmessage(self, title, job_name, branch, build_url, build_status):
"""
格式化消息格式
"""
message = """
{}
---------------------------------
构建信息
---------------------------------
{}
---------------------------------
状态:{}
任务名:{}
分支名:{}
构建日志:{}console
---------------------------------
""".format(title, getNowTime(), build_status, job_name, branch, build_url, build_url)
self.wechatMsg.sendMsg(message)
def call_jenkins(argv):
"""
发送jenkins编译消息给企业微信
参数:
title 提醒标题
jobname:Jenins任务名
branch: git分支
build_url: Jenins编译的url地址
build_status: 构建的状态
"""
job_name = argv[2]
branch = argv[3]
build_url = argv[4]
build_status = argv[5]
jenkins = Jenkins()
jenkins.sendmessage('---Jenkins 构建提醒----', job_name, branch, build_url, build_status)
if __name__ == "__main__":
"""
sys.argv获取命令中的参数list
"""
if len(sys.argv) > 1:
print(sys.argv)
if sys.argv[1] == 'jenkins':
print('--- jenkins')
call_jenkins(sys.argv)
else:
print('usage:')
print('测试Jenkins的命令“ python messagetoWechat.py jenkins ${JOB_NAME} ${GIT_BRANCH} ${BUILD_URL} 构建成功')
6、效果
见下图