寫在前面的話
在某些時候,我們希望能夠實現這樣一個功能,當使用者提交東西到 gitlab 上的時候,希望它能夠自動觸發構建,釋出到我們需要的環境。
目前我們內部有做類似的需求:產品提交原型到 gitlab,然後 gitlab 分支變動觸發 Jenkins 構建,將最新的產品原型釋出到 nginx 配置的網頁訪問目錄。更新完成以後通過釘釘機器人提供的 webhook 在公司群裡通知大家,並列印出本次提交者是誰,提交的內容是啥。
配置 Gitlab 觸發 Jenkins 自動構建
需要的外掛有:GitLab 和 Gitlab Hook
1. 我們在外掛中心可以搜尋到:
直接安裝重啟!
特別說明:
網上有很多教程,到這一步以後一般都是去 Gitlab 的使用者設定裡面配置 Access Token,然後再將 Token 配置到 Jenkins 的系統配置中 GitLab 項裡面,其實根本就不需要。
我們後面 Jenkins 連線 GitLab 認證通訊是通過 Jenkins 本身配置 GitLab 賬戶來拉取程式碼。
GitLab 觸發 Jenkins 構建則是通過 Jenkins 提供給 GitLab 的 Token。
至始至終那個配置都沒用到,所以網上大多教程其實都是你抄我我抄你走冤枉路。
2. 建立一個測試新任務:
配置任務 GIT 地址:
配置自動構建:
新增構建操作:
儲存配置!
3. Gitlab 配置專案連線 Jenkins:
4. 提交 Gitlab 專案的 Master 分支測試自動構建:
此時會過來檢視 Jenkins:
可以看到觸發構建成功,而且可以看到是誰提交了程式碼觸發的構建!
5. 至此,Gitlab 分支提交程式碼自動觸發構建的配置完成,我們甚至可以在 GitLab 上面檢視觸發記錄:
在我們之前編輯 Token 的地方,點選編輯我們的 Token:
在編輯的最下方可以看到執行記錄:
釘釘指令碼擴充套件
如我一開始說到的,有些時候我們需要達到通知的目的,因為近來的公司都用釘釘,所以專門做了一個釘釘機器人的指令碼用來將我們構建的資訊傳送到群裡,達到通知的目的。
Jenkins 目前本身已經具有了釘釘的外掛,但是個人覺得不是很好用,所以就自己寫了指令碼,用於測試。
為了更好的結合 GitLab 使用,我們需要用到一個第三方外掛,這是專案的開源地址:
這是打包好的外掛下載地址:
連結: https://pan.baidu.com/s/1yqxEoJAxFbTGWHrO5lHu3Q 提取碼: rjcj
該外掛能幫助我們獲取到一些 GitLab 使用者提交資訊!
1. 下載後 Jenkins 本地安裝該外掛:
上傳安裝該外掛,不需要重啟 Jenkins!
2. 構建的前面多個 構建環境 這一項,下圖是我們配置的內容:
內容:
%1$s\n\n更新內容:%3$s
3. 修改構建,加入我們的指令碼:
指令碼內容如下:
#!/bin/bash ################################################################# # 作者:Dylan <1214966109@qq.com> # 日期:2019-07-18 # 作用:機器人通知 ################################################################# ################################################################# # 釘釘訊息通知 ################################################################# function SEND_MESSAGE_TO_DINGDING() { /usr/bin/curl "$1" -H 'Content-Type: application/json' -d " { \"actionCard\": { \"title\": \"$2\", \"text\": \"$3\", \"hideAvatar\": \"0\", \"btnOrientation\": \"0\", \"btns\": [ { \"title\": \"$2\", \"actionURL\": \"$4\" } ] }, \"msgtype\": \"actionCard\" }" } ################################################################# # 釘釘訊息變數 ################################################################# # 當前時間 TIME_NOW=$(date +%Y年%m月%d日-%H:%M:%S) # 機器人 webhook 地址 DINGDING_TOKEN_URL='https://oapi.dingtalk.com/robot/xxxxxx' # 訊息標題 DINGDING_TITLE="Oops,GitLab專案更新啦~" # 訊息正文 DINGDING_CONTENT="更新使用者:${SCM_CHANGELOG}\n\n更新時間:${TIME_NOW}" # Jenkins 地址 JENKINS_URL='http://192.168.10.202:8080/jenkins' # Jenkins 構建日誌地址 JENKINS_JOB_URL="${JENKINS_URL}/job/${JOB_NAME}/${BUILD_NUMBER}/console" ################################################################# # 傳送釘釘訊息 ################################################################# SEND_MESSAGE_TO_DINGDING ${DINGDING_TOKEN_URL} ${DINGDING_TITLE} ${DINGDING_CONTENT} ${JENKINS_JOB_URL}
注意上圖紅色部分需要替換成為自己的配置!
如果不知道怎麼配置釘釘機器人的 webhook,可以參考我另外一篇部落格:
4. 此時提交程式碼測試,最終釘釘訊息:
5. 至此通知配置完成!
小結
GitLab 提交觸發自動構建是一個很常見的需求,我們可以通過這個配置降低人力成本。
另外如果你公司沒有使用釘釘也沒有關係,你可以考慮個人釘釘賬號,然後拉一個群,但是群有需求,就是必須 3 個人才能建立。
你可以通過先拉人建立完群以後再將人踢掉的方式建立群。
當然,如果你們部門不止你一個人,那就更簡單了。我目前 zabbix 告警,Jenkins 上線,以前其他各種需求幾乎都是和釘釘機器人結合起來用的。