实现Jenkins集成企业微信-消息通知的功能

Jenkins集成微信,工作中档git有新代码提交会触发钩子自动完成上线,运维和开发人员不须时刻盯着Jenkins,通过企业微信的方式显示给运维和开发人员

  1. 注册企业微信的公众号 申请地址:https://mp.weixin.qq.com/
    搜索微信公众平台->注册->选择企业微信
    image.png

选择完成后把下面信息进行完善->使用自己微信扫描二维码进行管理后-点注册


image.png

注册成功登陆后点击应用管理->创建应用


image.png

上传图片->填写应用名称-可见范围->创建应用-保存好agentld和secret写入py脚本


image.png

更改py脚本内对应的内容 touser 为账号名称


image.png
image.png

Corpid为企业ID 这里只把corpid写入对应的位置


image.png

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
解压到某个目录 -> 进入目录执行以下操作
cdchangelog-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 就是时间格式。
image.png

构建后操作选择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

image.png

image.png

2) gitee 配置自动触发构建 Generic Webhook Trigger

image.png

配置远程仓库的钩子


image.png

进入到我们的远程仓库中,选择左侧的WebHooks后,配置URL,URL的格式为:

http://JENKINS_URL/generic-webhook-trigger/invoke?token=owner_token

JENKINS_URL指的是你的IP地址和服务器的端口号
owner_token指的是之前在上一步配置的token


image.png

配置完成后,点击更新/完成。然后测试一下请求是否成功,如果成功的话,可以在请求历史中看到对应的请求结果


image.png

如果遇到请求状态是403的话,就需要检查一下返回的错误信息,看一下jenkins那边的配置有没有问题了。
可以试一下重启一下Jenkins,或者是检查一下关于Jenkins安全相关的配置,在跨站请求伪造保护模块中,选择启用代理兼容。需要注意的是,由于我的Jenkins版本比较高,所以不一定和你们的页面完全一样,如果这里解决不了你的问题的话,还是另外需要百度解决。


image.png

image.png

实现信息推送的操作(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
image.png

1) Gitee WebHooke发送请求

image.png
# 企业微信收到的信息
[项目名称] : 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容