詳解Jenkins 實現(xiàn)Gitlab事件自動觸發(fā)Jenkins構(gòu)建及釘釘消息推送
實踐環(huán)境
GitLab Community Edition
12.6.4
Jenkins
2.284
Post build task
1.9(Jenkins
插件)
Generic Webhook Trigger Plugin
1.72(Jenkins
插件)
GitLab
1.5.13(Jenkins
插件)
實現(xiàn)步驟
釘釘機器人配置
選擇要推送的釘釘群 -> 點擊群設(shè)置按鈕 -> 點擊智能群助手 -> 點擊添加機器人 -> 點擊添加機器人+號按鈕 -> 點擊自定義->填寫機器人名字,用于匹配推送消息請求體內(nèi)容的的關(guān)鍵詞
然后,復制出Webhook
地址,供下文釘釘消息推送Shell
腳本中使用,完成
安裝Jenkins插件新建并配置Jenkins項目Build Triggers配置
如下,勾選Generic Webhook Trigger
Post content parameters
(因為Gitlab
觸發(fā)的請求為post
請求,需要基于請求體內(nèi)容來判斷是否執(zhí)行Jenkins
構(gòu)建)關(guān)鍵配置項說明:
Variable
自定義變量名稱
Expression
用于提取變量值的表達式(支持JSONPath
、XPath
),提取的值賦值給上述自定義變量(例中為event_name
)。
Option Filter
關(guān)鍵配置項說明:
Expression
用于匹配下述Text
的正則表達式,如果匹配則執(zhí)行構(gòu)建請求,否則不執(zhí)行。這里配置為^push$
,是因為Gitlab
merge
合并代碼操作觸發(fā)的請求,其請求體為json
格式數(shù)據(jù),其中包含名為event_name
的鍵,其值為 push
Text
用于匹配上述正則表達式的文本,例中設(shè)置為自定義變量$event_name
。
以上配置大意為,如果收到構(gòu)建請求,使用JSONPath
表達式從JSON
格式的請求體獲取鍵為event_name
的值,存儲到名為event_name
變量,然后取該變量值同正則表達式^push$
匹配,如果匹配,則觸發(fā)Jenkins
構(gòu)建當前項目,否則不構(gòu)建。
Token:自定義token值,用于請求http://JENKINS_URL/generic-webhook-trigger/invoke
觸發(fā)構(gòu)建使用,如下,可以用于查詢參數(shù)、請求頭參數(shù)
/invoke?token=TOKEN_HEREtoken: TOKEN_HEREAuthorization: Bearer TOKEN_HERE
generic-webhook-trigger
配置參考連接
https://plugins.jenkins.io/generic-webhook-trigger/
Post-build Actions
配置
點擊Add post-build action
按鈕,彈出界面中選擇Post build task
可新增以下配置界面。如下,可在Script
輸入框中編寫構(gòu)建完成后需要執(zhí)行的Shell命令(該插件會先根據(jù)填寫的shell
命令生成一個臨時sh腳本,然后執(zhí)行該腳本),例中為釘釘推送命令,具體代碼參見下文
如上圖,如果只希望構(gòu)建成功才執(zhí)行Script
,可以勾選Run script only if all previous steps were successful
釘釘消息推送Shell
#!/bin/bash ################################################################# # 作者:shouke # 日期:2021-03-07 # 作用:機器人通知 ################################################################# # 釘釘消息變量定義 ################################################################# # 當前時間 TIME_NOW=`date "+%Y年%m月%d日 %H:%M:%S"` BUILD_STATUS="失敗" LAST_BUILD_BUILD_XML=`curl http://ops.dev.xxxx.com/view/testarch/job/$JOB_NAME/lastBuild/api/xml --user juser_name:123456` BUILD_RESULT=$(echo $LAST_BUILD_BUILD_XML | grep "<result>SUCCESS</result>") if [ "${BUILD_RESULT}" ];then BUILD_STATUS="成功" else BUILD_RESULT=$(echo $LAST_BUILD_BUILD_XML | grep "<result>FAILURE</result>") if [ "${BUILD_RESULT}" ];then BUILD_STATUS="失敗" else BUILD_STATUS="無法獲取" fi fi # 機器人 webhook 地址(上文添加釘釘機器人結(jié)束時復制的webhook地址) DINGTALK_WEBHOOK_URL='https://oapi.dingtalk.com/robot/send?access_token=903fcd6c56f301d0a57bee243792a11bb1e42cae89af5a9071bdba890c0a3d2' # 消息標題 # 實際不起作用,但是不能少,否則發(fā)送失敗 DINGTALK_TITLE="XX平臺有新的構(gòu)建,請及時查閱" # 消息正文 # Jenkins Job構(gòu)建日志地址 JENKINS_JOB_BUILD_LOG_URL="http://ops.dev.xxxx.com/view/testarch/job/${JOB_NAME}/${BUILD_NUMBER}/console" DINGTALK_TEXT="## xx平臺有新的構(gòu)建,請及時查閱\n\n>\ **【通知時間】**:${TIME_NOW}\n\n>\ **【構(gòu)建ID】**:${BUILD_DISPLAY_NAME}\n\n>\ **【構(gòu)建項目】**:${JOB_NAME}\n\n>\ **【構(gòu)建狀態(tài)】**:${BUILD_STATUS}\n\n>\ **[點擊查看更多](${JENKINS_JOB_BUILD_LOG_URL})**\n " # # 發(fā)送釘釘消息通知函數(shù) ################################################################# function SEND_MESSAGE_TO_DINGTALK() { /usr/bin/curl "$1" -H 'Content-Type: application/json' -d " { \"markdown\": { \"title\": \"$2\", \"text\": \"$3\" }, \"at\": { \"atMobiles\": [], \"isAtAll\": false }, \"msgtype\": \"markdown\" } " } # 發(fā)送釘釘消息 ################################################################# SEND_MESSAGE_TO_DINGTALK "${DINGTALK_WEBHOOK_URL}" "${DINGTALK_TITLE}" "${DINGTALK_TEXT}"
說明:
curl http://ops.dev.xxxx.com/view/testarch/job/$JOB_NAME/lastBuild/api/xml --user juser_name:123456`
以名為juser_name
的用戶,使用密碼123456訪問指定項目的最后一次構(gòu)建相關(guān)的信息,返回xml文檔
注意:釘釘聊天窗口中要實現(xiàn)消息換行必須使用兩個\n
Gitlab
自動觸發(fā)配置
Settings
-> Integration
,打開如下頁面,
- 填寫URL(
http://ops.dev.xxxx.com/generic-webhook-trigger/invoke?token=0771826b93bbd566266bce34f5123ebb
),這里的token
值即為generic-webhook-trigger
插件中配置在定義token
值 - 勾選
Push events
觸發(fā)器(這里以push、合并代碼操作為例子,所以僅勾選該事件) - 勾選
Enable SSL verification
復選框(如果沒有勾選的話,默認就是勾選的)
最后點擊 Add webhook
按鈕
添加的配置,會自動顯示在下方,可以對其進行事件觸發(fā)測試
觸發(fā)的記錄會自動在配置編輯頁面下方顯示,點擊 View details
按鈕,可以查看請求明細
注意:自動觸發(fā)時Jenkins
項目構(gòu)建時,如果Jenkins
使用了參數(shù)化構(gòu)建插件Build With Parameters Plugin
,并且使用插件實現(xiàn)的參數(shù)有設(shè)置默認值,則自動觸發(fā)時也會自動使用對應參數(shù)的默認值進行構(gòu)建。
釘釘消息推送效果圖
到此這篇關(guān)于使用Jenkins完成釘釘消息推送及Gitlab事件自動觸發(fā)的Jenkins構(gòu)建的文章就介紹到這了,更多相關(guān)Jenkins內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot 中實現(xiàn)跨域的多種方式小結(jié)
Spring Boot提供了多種方式來實現(xiàn)跨域請求,開發(fā)者可以根據(jù)具體需求選擇適合的方法,在配置時,要確保不僅考慮安全性,還要兼顧應用的靈活性和性能,本文給大家介紹Spring Boot 中實現(xiàn)跨域的多種方式,感興趣的朋友一起看看吧2024-01-01Java?synchronized關(guān)鍵字性能考量及優(yōu)化探索
這篇文章主要為大家介紹了Java?synchronized關(guān)鍵字性能考量及優(yōu)化探索示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12使用shardingsphere對SQLServer坑的解決
本文主要介紹了使用shardingsphere對SQLServer坑的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-03-03Java編程實現(xiàn)基于用戶的協(xié)同過濾推薦算法代碼示例
這篇文章主要介紹了Java編程實現(xiàn)基于用戶的協(xié)同過濾推薦算法代碼示例,具有一定參考價值,需要的朋友可以了解下。2017-11-11