因為想解放人工讼稚,實現(xiàn)代碼push完后jenkins自動部署代碼,代碼倉庫用的是gitlab茧痒,首先想到當(dāng)然是肮韧,gitlab通過webhook去通知jenkins部署代碼。在網(wǎng)上找文檔旺订,發(fā)現(xiàn)大多數(shù)都是粘貼復(fù)制而且質(zhì)量參差不齊弄企,爬坑不少
前期準(zhǔn)備
- 安裝部署jenkins(參考Jenkins官方文檔)
- 安裝部署gitlab(參考gitlab官方文檔)
配置jenkins
-
安裝插件
去jenkins系統(tǒng)管理下的插件管理,在線安裝Gitlab Hook Plugin和Gitlab Plugin這兩個插件区拳,然后叫重啟jenkins
-
系統(tǒng)配置
安裝完插件后桩蓉,去jenkins的系統(tǒng)管理下的系統(tǒng)設(shè)置,設(shè)置好Gitlab的參數(shù)劳闹,并測試時候能連接上Gitlab
API token可以在gitlab中的用戶的設(shè)置中找到
-
新建任務(wù)
這里要提醒下院究,jenkins所在的服務(wù)器的jenkins用戶(注意是jenkins用戶,而不是root)要設(shè)置好ssh公私鑰免密登錄本涕,這就需要為jenkins生成公私鑰业汰,并ssh-copy-id到代碼部署服務(wù)器和gitlab服務(wù)器
后面的URL可以copy下來,后面會用到
這里記得需要選擇Filter branches by name并且填上分支名菩颖,選擇這個可以做到样漆,如果改分支有push事件,就會觸發(fā)這個job的構(gòu)建晦闰。如果選擇Allow all branches to trigger this job放祟,則所有分支的push事件都會觸發(fā)這個job的構(gòu)建,顯然這個并不是很合理呻右。
最后配置好構(gòu)建步驟直接保存
配置gitlab
點擊你要配置的項目跪妥,進(jìn)入設(shè)置
在鏈接那里輸入之前jenkins上提供的webhook url,編輯完后保存声滥,點擊測試眉撵,如果返回200,那就成功了落塑,去jenkins看看有沒有自動構(gòu)建的記錄纽疟。
第二種鏈接URL格式是http://<jenkisn的IP地址和端口>/gitlab/build_now/<jenkins的job名稱>,例如jenkins的IP地址為192.168.4.1:8080憾赁,job名稱是job污朽,那么該URL為http://192.168.4.1:8080/gitlab/build_now/job1
在這一步我遇到了兩個問題
- 測試失敗返回404,Hook execution failed: execution expired
后來查看文檔龙考,得知原因是如果jenkins是通過調(diào)度器去分發(fā)請求來訪問的或者是利用iptables去轉(zhuǎn)發(fā)的話都會出現(xiàn)這種問題蟆肆,解決方法是直接把webhook中的jenkins的ip地址改成內(nèi)網(wǎng)jenkins的Ip地址和端口(前提是jenkins和gitlab在內(nèi)網(wǎng)能互通) -
測試返回Anonymous
解決方法是在jenkins系統(tǒng)管理下的系統(tǒng)設(shè)置中的gitlab選項的配置那里矾睦,取消Enable authentication for '/project' end-point的復(fù)選項的選中,保存就可以