实现Jenkins集成企业微信-消息通知的功能
Jenkins集成微信,工作中档git有新代码提交会触发钩子自动完成上线,运维和开发人员不须时刻盯着Jenkins,通过企业微信的方式显示给运维和开发人员
- 注册企业微信的公众号 申请地址:https://mp.weixin.qq.com/
搜索微信公众平台->注册->选择企业微信
选择完成后把下面信息进行完善->使用自己微信扫描二维码进行管理后-点注册
注册成功登陆后点击应用管理->创建应用
上传图片->填写应用名称-可见范围->创建应用-保存好agentld和secret写入py脚本
更改py脚本内对应的内容 touser 为账号名称
Corpid为企业ID 这里只把corpid写入对应的位置
python脚本内容
#!/usr/bin/python2.7
#_*_coding:utf-8 _*_
import requests,sys,json
import urllib3
urllib3.disable_warnings()
reload(sys)
sys.setdefaultencoding('utf-8')
def GetToken(Corpid,Secret):
Url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken"
Data = {
"corpid":Corpid,
"corpsecret":Secret
}
r = requests.get(url=Url,params=Data,verify=False)
Token = r.json()['access_token']
return Token
def SendMessage(Token,Subject,Content, ProName):
Url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" % Token
#Data = {
# "chatid": "JenkinsAlarm", # 此处不明白请参考企业微信官网
# "msgtype": "text",
# "text": {
# "content": "[项目名称] : " + ProName + '/n' + "[项目地址] : " + Subject + '/n' + Content + '/n'
# },
# "safe": "0"
#}
data = {
"touser" : "XXXXXX",
"msgtype" : "text",
"agentid" : 1000002,
"text" : {
"content" : "[项目名称] : " + ProName + '/n' + "[项目地址] : " + Subject + '/n' +
Content + '/n'
},
"safe":0
}
r = requests.post(url=Url,data=json.dumps(data),verify=False)
return r.text
def action_from_file(filename):
try:
str1 = '[变更日志] : '
with open(filename, 'r') as f:
for i in f.readlines():
str1 += i
print str1
if len(str1) == 17:
str1 += " 无变更"
# print str1
return str1
except Exception as e:
#print('[ERROR] {0}'.format(e))
str1 += str(e)
if __name__ == '__main__':
Corpid = "企业ID"
Secret = "Secret"
Subject = sys.argv[1]
Content = action_from_file(sys.argv[2])
ProName = sys.argv[3]
Token = GetToken(Corpid, Secret)
Status = SendMessage(Token,Subject,Content,ProName)
print Status
完成后配置Jenkins
1.由于Jenkins没有官网的插件来完成此功能,所以我们只能用网络上一些开源的插件(线下班不需要以下步骤,已集合在plugins)
Github下载代码:https://github.com/daniel-beck/changelog-environment-plugin
解压到某个目录 -> 进入目录执行以下操作
cd
到 changelog-environment-plugin-master
下,执行mvn verify
时间较长,会在changelog-environment-plugin-master/target/
下有个changelog-environment.hpi
文件,上传到Jenkins即可使用
2、配置jenkins
Jenkins进入到项目中->构建环境多了Add Changelog Information to Environment->点击选择
Entry Format中添加 %3$s(at %4$s via %1$s),参数分别为ChangeLog内容,时间,提交人。
Date Format中添加 yyyy‐MM‐dd HH:mm:ss 就是时间格式。
构建后操作选择Post build task
, 如果没有此选择请安装Hudson Post build task
插件,SCM_CHANGELOG
须安装changelog
插件
上传py脚本->jenkins服务器上安装python requests
模块。
如果网络速比较慢的,可以找国内源下载
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install python-pip
pip2.7 install requests
参考文档:Python安装流程 - python2 安装 pip
https://www.jianshu.com/p/0dc71548b213
1) 是使用gitlab 配置自动触发构建、需要设置安全令牌Secret token
2) gitee 配置自动触发构建 Generic Webhook Trigger
配置远程仓库的钩子
进入到我们的远程仓库中,选择左侧的WebHooks后,配置URL,URL的格式为:
http://JENKINS_URL/generic-webhook-trigger/invoke?token=owner_token
JENKINS_URL指的是你的IP地址和服务器的端口号
owner_token指的是之前在上一步配置的token
配置完成后,点击更新/完成。然后测试一下请求是否成功,如果成功的话,可以在请求历史中看到对应的请求结果
如果遇到请求状态是403的话,就需要检查一下返回的错误信息,看一下jenkins那边的配置有没有问题了。
可以试一下重启一下Jenkins,或者是检查一下关于Jenkins安全相关的配置,在跨站请求伪造保护模块中,选择启用代理兼容。需要注意的是,由于我的Jenkins版本比较高,所以不一定和你们的页面完全一样,如果这里解决不了你的问题的话,还是另外需要百度解决。
实现信息推送的操作(Gitee、GitLab等)
添加 Post build task
echo "==========Start Notify=============="
echo ${SCM_CHANGELOG} > /tmp/${JOB_NAME}_change.log
python /data/script/jenkins_notify.py ${BUILD_URL} /tmp/${JOB_NAME}_change.log ${JOB_NAME}
rm -fv /tmp/${JOB_NAME}_change.log
1) Gitee WebHooke发送请求
# 企业微信收到的信息
[项目名称] : Java-Project01
[项目地址] : http://JenkinsIP:端口/job/Java-Project01//
[变更日志] : XXXXXXXXXXXXXX
2)GitLab Webhook发送请求
# 手动上传代码库
git tag -a v1.X -m "v1.x稳定版"
git commit -m "update index.html"
git push -u origin v1.x
# 企业微信收到的信息
[项目名称] : Java-Project01
[项目地址] : http://JenkinsIP:端口/job/Java-Project01//
[变更日志] : XXXXXXXXXXXXXX
共有 0 条评论