寫在前面的話
在某些時候,我們希望能夠實現這樣一個功能,當用戶提交東西到 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 上線,以前其他各種需求幾乎都是和釘釘機器人結合起來用的。
