背景
接口自動化期望代碼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. 找了安全同事幫忙配置后,還是不通(懷疑人生了),思考可以通過什么方法快速驗證網絡還是不通過呢?於是嘗試自己寫一個簡單接口驗證;