jenkins 設置 gitlab web hooks
背景
接口自動化期望代碼push後觸發實現持續集成,代碼push後,自動化執行jenkins的job。
步驟
準備工作
工具:jenkins,gitlab
jenkins需要安裝插件:git plugin,gitlab hook plugin , gitlab plugin(有的插件是自帶的,缺什麽安裝什麽)
gitlab:確保有web hook權限,這個跟公司的gitlab有關,入口settings下的web hooks如下:
確保gitlab跟jenkins的連通性
hook的大概原理其實很簡單:設置了web hooks後,當git項目觸發了event後會往你填寫的hooks URL發送一個post請求
那麽首先要確保gitlab跟jenkins服務器的連通性
我這邊是在jenkins服務器通過flask框架寫了一個測試的接口:
from flask import Flask,request app= Flask(__name__) @app.route("/test",methods=[‘GET‘, ‘POST‘]) def hello(): # return "Hello World!" print(request.data); return request.data if __name__ == "__main__": app.run(host=‘0.0.0.0‘,debug=True,port=8080)
那麽通過POST請求訪問http://your-jenkins-server-ip:8080/test會返回你request的body數據
設置web hooks的URL為http://your-jenkins-server-ip:8080/test後保存,
點擊“TEST HOOK”測試這個hook是否生效,正常的話,頁面提示200
設置jenkins
源碼管理設置
構建觸發器設置,這個URL是gitlab web hook那裏需要填寫的URL
設置完畢後,點擊保存
設置gitlab的web hook
URL填寫jenkins上的那個URL,這裏的就是上圖的http://your-jenkins-server-ip:port/project/smart
測試是否生效
在gitlab上對代碼進行update,然後commit;
去到jenkins查看job是否被執行:
小結
1. 需要弄清楚原理,是gitlab訪問設置的hook URL;
2. 當設置jenkins和gitlab都設置的沒問題,但TEST HOOK就是不通過的時候,需要思考為什麽有這種情況?於是懷疑是公司gitlab和自己搭建的jenkins網絡不通;
3. 找了安全同事幫忙配置後,還是不通(懷疑人生了),思考可以通過什麽方法快速驗證網絡還是不通過呢?於是嘗試自己寫一個簡單接口驗證;
jenkins 設置 gitlab web hooks