實(shí)現(xiàn)Jenkins集成企業(yè)微信-消息通知的功能

Jenkins集成微信,工作中檔git有新代碼提交會觸發(fā)鉤子自動完成上線,運(yùn)維和開發(fā)人員不須時(shí)刻盯著Jenkins,通過企業(yè)微信的方式顯示給運(yùn)維和開發(fā)人員

  1. 注冊企業(yè)微信的公眾號 申請地址:https://mp.weixin.qq.com/
    搜索微信公眾平臺->注冊->選擇企業(yè)微信
    image.png

選擇完成后把下面信息進(jìn)行完善->使用自己微信掃描二維碼進(jìn)行管理后-點(diǎn)注冊


image.png

注冊成功登陸后點(diǎn)擊應(yīng)用管理->創(chuàng)建應(yīng)用


image.png

上傳圖片->填寫應(yīng)用名稱-可見范圍->創(chuàng)建應(yīng)用-保存好agentld和secret寫入py腳本


image.png

更改py腳本內(nèi)對應(yīng)的內(nèi)容 touser 為賬號名稱


image.png
image.png

Corpid為企業(yè)ID 這里只把corpid寫入對應(yīng)的位置


image.png

python腳本內(nèi)容

#!/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",  # 此處不明白請參考企業(yè)微信官網(wǎng)
    #    "msgtype": "text",
    #    "text": {
    #        "content": "[項(xiàng)目名稱] : " + ProName + '\n' + "[項(xiàng)目地址] : " + Subject + '\n' + Content + '\n'
    #    },
    #    "safe": "0"
    #}
    data = {
        "touser" : "XXXXXX",
        "msgtype" : "text",
        "agentid" : 1000002,
        "text" : {
           "content" : "[項(xiàng)目名稱] : " + ProName + '\n' + "[項(xiàng)目地址] : " + 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 = "企業(yè)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沒有官網(wǎng)的插件來完成此功能,所以我們只能用網(wǎng)絡(luò)上一些開源的插件(線下班不需要以下步驟,已集合在plugins)
Github下載代碼:https://github.com/daniel-beck/changelog-environment-plugin
解壓到某個(gè)目錄 -> 進(jìn)入目錄執(zhí)行以下操作
cdchangelog-environment-plugin-master 下,執(zhí)行mvn verify時(shí)間較長,會在changelog-environment-plugin-master/target/下有個(gè)changelog-environment.hpi 文件,上傳到Jenkins即可使用

2、配置jenkins
Jenkins進(jìn)入到項(xiàng)目中->構(gòu)建環(huán)境多了Add Changelog Information to Environment->點(diǎn)擊選擇

Entry Format中添加 %3$s(at %4$s via %1$s),參數(shù)分別為ChangeLog內(nèi)容,時(shí)間,提交人。 
Date Format中添加 yyyy‐MM‐dd HH:mm:ss 就是時(shí)間格式。
image.png

構(gòu)建后操作選擇Post build task, 如果沒有此選擇請安裝Hudson Post build task插件,SCM_CHANGELOG須安裝changelog插件

上傳py腳本->jenkins服務(wù)器上安裝python requests模塊。
如果網(wǎng)絡(luò)速比較慢的,可以找國內(nèi)源下載

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
http://www.itdecent.cn/p/0dc71548b213

1) 是使用gitlab 配置自動觸發(fā)構(gòu)建、需要設(shè)置安全令牌Secret token

image.png

image.png

2) gitee 配置自動觸發(fā)構(gòu)建 Generic Webhook Trigger

image.png

配置遠(yuǎn)程倉庫的鉤子


image.png

進(jìn)入到我們的遠(yuǎn)程倉庫中,選擇左側(cè)的WebHooks后,配置URL,URL的格式為:

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

JENKINS_URL指的是你的IP地址和服務(wù)器的端口號
owner_token指的是之前在上一步配置的token


image.png

配置完成后,點(diǎn)擊更新/完成。然后測試一下請求是否成功,如果成功的話,可以在請求歷史中看到對應(yīng)的請求結(jié)果


image.png

如果遇到請求狀態(tài)是403的話,就需要檢查一下返回的錯(cuò)誤信息,看一下jenkins那邊的配置有沒有問題了。
可以試一下重啟一下Jenkins,或者是檢查一下關(guān)于Jenkins安全相關(guān)的配置,在跨站請求偽造保護(hù)模塊中,選擇啟用代理兼容。需要注意的是,由于我的Jenkins版本比較高,所以不一定和你們的頁面完全一樣,如果這里解決不了你的問題的話,還是另外需要百度解決。


image.png

image.png

實(shí)現(xiàn)信息推送的操作(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發(fā)送請求

image.png
# 企業(yè)微信收到的信息
[項(xiàng)目名稱] : Java-Project01
[項(xiàng)目地址] : http://JenkinsIP:端口/job/Java-Project01//
[變更日志] : XXXXXXXXXXXXXX

2)GitLab Webhook發(fā)送請求

# 手動上傳代碼庫
git tag -a v1.X -m "v1.x穩(wěn)定版"
git commit -m "update index.html"
git push -u origin v1.x

# 企業(yè)微信收到的信息
[項(xiàng)目名稱] : Java-Project01
[項(xiàng)目地址] : http://JenkinsIP:端口/job/Java-Project01//
[變更日志] : XXXXXXXXXXXXXX
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容