Jenkins 實現Gitlab事件自動觸發Jenkins構建及釘釘消息推送

實現Gitlab事件自動觸發Jenkins構建及釘釘消息推送

實踐環境

GitLab Community Edition 12.6.4git

Jenkins 2.284web

Post build task 1.9(Jenkins插件)正則表達式

Generic Webhook Trigger Plugin 1.72(Jenkins插件)shell

GitLab 1.5.13(Jenkins插件)json

實現步驟

釘釘機器人配置

選擇要推送的釘釘羣 -> 點擊羣設置按鈕 -> 點擊智能羣助手 -> 點擊添加機器人 -> 點擊添加機器人+號按鈕 -> 點擊自定義->填寫機器人名字,用於匹配推送消息請求體內容的的關鍵詞api

而後,複製出Webhook地址,供下文釘釘消息推送Shell腳本中使用,完成bash

安裝Jenkins插件

新建並配置Jenkins項目

Build Triggers配置

以下,勾選Generic Webhook Triggermarkdown

Post content parameters(由於Gitlab觸發的請求爲post請求,須要基於請求體內容來判斷是否執行Jenkins構建)關鍵配置項說明:app

Variable 自定義變量名稱curl

Expression 用於提取變量值的表達式(支持JSONPathXPath),提取的值賦值給上述自定義變量(例中爲event_name)。

Option Filter關鍵配置項說明:

Expression 用於匹配下述Text的正則表達式,若是匹配則執行構建請求,不然不執行。這裏配置爲^push$,是由於Gitlab merge合併代碼操做觸發的請求,其請求體爲json格式數據,其中包含名爲event_name的鍵,其值爲 push

Text 用於匹配上述正則表達式的文本,例中設置爲自定義變量$event_name

以上配置大意爲,若是收到構建請求,使用JSONPath表達式從JSON格式的請求體獲取鍵爲event_name的值,存儲到名爲event_name變量,而後取該變量值同正則表達式^push$匹配,若是匹配,則觸發Jenkins構建當前項目,不然不構建。

Token:自定義token值,用於請求http://JENKINS_URL/generic-webhook-trigger/invoke觸發構建使用,以下,能夠用於查詢參數、請求頭參數

/invoke?token=TOKEN_HERE
token: TOKEN_HERE
Authorization: Bearer TOKEN_HERE
generic-webhook-trigger配置參考鏈接

https://plugins.jenkins.io/generic-webhook-trigger/

Post-build Actions配置

點擊Add post-build action按鈕,彈出界面中選擇Post build task可新增如下配置界面。以下,可在Script輸入框中編寫構建完成後須要執行的Shell命令(該插件會先根據填寫的shell命令生成一個臨時sh腳本,而後執行該腳本),例中爲釘釘推送命令,具體代碼參見下文

如上圖,若是隻但願構建成功才執行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 地址(上文添加釘釘機器人結束時複製的webhook地址)
DINGTALK_WEBHOOK_URL='https://oapi.dingtalk.com/robot/send?access_token=903fcd6c56f301d0a57bee243792a11bb1e42cae89af5a9071bdba890c0a3d2'

# 消息標題 # 實際不起做用,可是不能少,不然發送失敗
DINGTALK_TITLE="XX平臺有新的構建,請及時查閱"


# 消息正文
# Jenkins Job構建日誌地址
JENKINS_JOB_BUILD_LOG_URL="http://ops.dev.xxxx.com/view/testarch/job/${JOB_NAME}/${BUILD_NUMBER}/console"

DINGTALK_TEXT="## xx平臺有新的構建,請及時查閱\n\n>\
**【通知時間】**:${TIME_NOW}\n\n>\
**【構建ID】**:${BUILD_DISPLAY_NAME}\n\n>\
**【構建項目】**:${JOB_NAME}\n\n>\
**【構建狀態】**:${BUILD_STATUS}\n\n>\
**[點擊查看更多](${JENKINS_JOB_BUILD_LOG_URL})**\n
" 
#  
# 發送釘釘消息通知函數
#################################################################
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\"
    }
    " 
}

# 發送釘釘消息
#################################################################
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訪問指定項目的最後一次構建相關的信息,返回xml文檔

注意:釘釘聊天窗口中要實現消息換行必須使用兩個\n

Gitlab自動觸發配置

Settings -> Integration,打開以下頁面,

1)填寫URL(http://ops.dev.xxxx.com/generic-webhook-trigger/invoke?token=0771826b93bbd566266bce34f5123ebb),這裏的token值即爲generic-webhook-trigger插件中配置在定義token

2)勾選Push events觸發器(這裏以push、合併代碼操做爲例子,因此僅勾選該事件)

3)勾選 Enable SSL verification 複選框(若是沒有勾選的話,默認就是勾選的)

最後點擊 Add webhook按鈕

添加的配置,會自動顯示在下方,能夠對其進行事件觸發測試

觸發的記錄會自動在配置編輯頁面下方顯示,點擊 View details按鈕,能夠查看請求明細

注意:自動觸發時Jenkins項目構建時,若是Jenkins使用了參數化構建插件Build With Parameters Plugin,而且使用插件實現的參數有設置默認值,則自動觸發時也會自動使用對應參數的默認值進行構建。

釘釘消息推送效果圖

相關文章
相關標籤/搜索