Jenkins與釘釘機器人實現手機端獲取當前服務日誌
那麽這個時候,我就琢磨使用手機端來啟動服務器裏腳本,讓這個腳本可以去獲取當前的日誌,然後再把結果返回到手機端。這樣就不用到哪裏都帶那個一看就很掃興的公司筆記本電腦了。
使用手機端啟動服務器裏腳本?我又不會開發android和ios,那麽肯定就要使用第三方工具,我條件反射的想到了jenkins,因為jenkins是用手機可以登錄的,那麽在手機端得到結果用什麽呢?在微信公眾號和釘釘機器人裏,我選擇了釘釘機器人。
創造釘釘機器人
我的釘釘版本是4.2.6.37,首先在左上角頭像的三角菜單有一個機器人管理
,如圖:
然後選擇自定義機器人,給它起個名又換一個圖標之後,添加到一個群聊裏,如圖:
添加的時候,這個機器人會生成一個webhook
,它的結構應該是:https://oapi.dingtalk.com/robot/send?access_token=XXX
,後面的XXX是標識符,不同的標識符代表不同的機器人,這個標識符如果丟了,可以在機器人頭像點擊一下然後選擇機器人設置
重新看到。
編寫機器人腳本
機器人的官方說明網址就是https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.zZIvnt&treeId=257&articleId=105735&docType=1
#!/bin/python #coding: utf-8 import json,urllib2 #這裏是機器人對應的Webhook地址 url = "https://oapi.dingtalk.com/robot/send?access_token=這裏輸入你機器人的標識符 #這裏是頭,原樣復制就好 header = { "Content-Type": "application/json", "charset": "utf-8" } #這裏是傳送的消息 data = { "msgtype": "text", "text": { "content": "這裏是消息正文!" }, "at": { "atMobiles": [ "A的手機號", "B的手機號" ], "isAtAll":False #這裏True代表要發給所有人,False的話,要代表消息只發給A和B這兩個人 } } sendData = json.dumps(data) request = urllib2.Request(url,data = sendData,headers = header) urlopen = urllib2.urlopen(request) print urlopen.read()
直接執行這個腳本,就會看到我剛新建的釘釘機器人在群聊裏說話了。
機器人搭配nginx
上面那個腳本已經可以初步實現我們的目的,但是有一個缺點,就是正文內容不能過長。但是我想多打印一點日誌,至少50行,怎麽辦?我想了想,可以把日誌放進nginx的一個網頁裏,然後用釘釘機器人反饋這個網頁地址啊,這樣內容想寫多少就可以寫多少了。
假設我現在獲取到的日誌的文件寫進一個叫chairmanmao.html
裏,在瀏覽器打開看是這樣的:
那麽上面那個機器人的python腳本就要改成這樣:
#!/bin/python
#coding: utf-8
import json,urllib2,commands
commands.getstatusoutput(‘echo -e "THIS IS TEST MESSAGE! \n" > /路徑/chairmantail.html‘) #這裏可以給網頁加一個標題
commands.getstatusoutput(‘cat /路徑/chairmanmao.txt >> /路徑/chairmanmao.html‘) #這裏就是把詩詞寫進html文件裏
#這裏是機器人的webhook地址
url = "https://oapi.dingtalk.com/robot/send?access_token=這裏輸入你機器人的標識符"
header = {
"Content-Type": "application/json",
"charset": "utf-8"
}
data = {
"msgtype": "link",
"link": {
"text": "點擊網址就可獲取到本次日誌查詢的結果",
"title": "日誌查詢結果已經生成!",
"picUrl": "http://p1x3hd2at.bkt.clouddn.com/nanshen.jpg", #這裏可以加一個縮略圖片
"messageUrl": "http://服務器外網IP地址/chairmanmao.html"
},
"at": {
"isAtAll":True # at為非必須
}
}
sendData = json.dumps(data)
request = urllib2.Request(url,data = sendData,headers = header)
urlopen = urllib2.urlopen(request)
print urlopen.read()
執行這個腳本可以看到機器人發送的信息如下:
然後打開這個網址,就看到完整的網頁信息:
到時候把毛主席詩詞換成實際的日誌文件就好了,不用一口氣打印所有的日誌出來,tail -n 50 日誌文件名
,50行足夠用了。
配置Jenkins
腳本寫完了,機器人也寫完了,這個時候就要添加“啟動端”。安裝Jenkins的步驟我這裏就不寫了,直接可以去看https://rorschachchan.github.io/2018/02/05/Jenkins安裝與創建簡單任務/
。現在去登錄Jenkins的網頁,去添加一個新的Job,比如我這個Job就叫“獲取模塊日誌”,如圖:
如果是要在Jenkins上去讀取其他服務器的日誌,就可以在構建project
的時候選擇參數化構建過程
,然後配置參數ip,到時候把這些ip傳遞給目標腳本。如果覺得這樣hold不住,可以不用jenkins的這個功能,把ip寫到腳本裏去,一了百了:
在構建
那一步,選擇Execute Shell
,然後裏面寫上具體的shell命令,如果在上面使用了參數,那麽參數就可以在這裏使用,我的腳本裏是沒有ip這個參數的,在圖裏寫$ip
就是做一個例子講解一下用法而已:
在構建後操作
這一步可以選擇E-mail Notification
,這樣如果失敗了會發送郵件通知。如果用不著就什麽都不用選。然後就是保存好這個project,點擊左側菜單欄的立即構建
,就會看到下面Build History
會多一個#1
出來,同時釘釘機器人也在群裏發消息,這個#1
就是構建的記錄,這個紀錄多了的話,新紀錄會覆蓋掉老的記錄。
點擊這個#1
,選擇控制臺輸出
,就能看到具體的操作結果了,跟在shell界面裏執行的效果差不多的。可見操作成功,目的已經達到了!
以後需要調用腳本,就在手機端瀏覽器裏登陸jenkins,然後構建一下這個project,同時就可以看到釘釘裏機器人有反饋了。
參考資料
https://xu3352.github.io/linux/2017/05/01/jenkins-restart-remote-server-tomcat
Jenkins與釘釘機器人實現手機端獲取當前服務日誌