搭建gitlab+jenkins+webhooks自動部署環境
阿新 • • 發佈:2018-12-17
概述
gitlab+jenkins+webhooks構建自動部署的專案的教程網上都有很多。我找了好幾個教程一起看,然後也配好了相關的環境。多餘重複的東西就不贅述了,把過程中遇到的問題提一下,希望不會再踩坑吧。
訪問許可權問題
在配置這個環境的時候,其實我是將gitlab和jenkins放在兩臺伺服器上部署。潛在的一個問題在於可能在內網裡是無法訪問到gitlab或者jenkins。
解決方案:
- gitlab需要修改配置檔案。並且更新配置。
配置檔案為/etc/gitlab/gitlab.rb
external_url nginx[‘listen_address’] nginx['listen_port'] ...
最後reconfigure一次即可。
sudo gitlab-ctl reconfigure
- gitlab所在的伺服器需要配置防火牆。
ufw防火牆配置設定。
- jenkins部署安裝完就可以直接在內網訪問了。
GitLab webhook URL
目前webhook設定那裡有點問題。
下面的這些報錯我都遇到過。
- Hook executed successfully but returned HTTP 500
- Hook executed successfully but returned HTTP 404
- Hook executed successfully but returned HTTP 403
- …
可能的原因是
- webhook的連結沒寫對。頁面上提供的gitlab webhook url其實是有點問題的,我試了好幾次都不成功。後面給出解決方案。
- 沒有填secret token。secret在Advance選項裡面,要點選
generate
按鈕。 - 專案的URL與secret token不對應。每個專案都有對應的webhook,對應著url和secret token。
- jenkins沒有設定全域性安全設定。
在jenkins->全域性安全配置->跨站請求偽造保護不做勾選以及jenkins->全域性安全配置授權策略選擇任何使用者可以做任何事情。
總結:
自己構造了一個url,完美的解決了這些問題。填完jenkins上build任務的configure後,就可以構造這個url了。
http://IP_ADDRESS:port/job/project_name/build?job=project_name&token=secret_token
測試
成功新增webhook之後,我們可以點選
Test
按鈕,gitlab會模擬一次push操作,然後傳送一個post請求到jenkins,去執行build任務。如果成功的話,HTTP返回碼會返回200或者201。同時,我們可以在jenkins的對應job下看到構建的記錄。這樣一來,就成功了。
gitlab API token
剛開始一直找不到,怎麼都找不到,因為按著教程的頁面根本沒有。原因可能是因為版本不同,然後導致介面的設定也不一樣。我說一下我這個版本在哪裡找這個gitlab api token。
gitlab-jenkins的憑證
jenkins所在的伺服器的ssh金鑰要放在gitlab上儲存,用於免密碼下載原始碼。填寫的時候是在原始碼管理那裡,填寫git專案的地址,然後憑證選擇SSH金鑰。然後在jenkins上要建立憑證,用於讓gitlab能夠訪問jenkins。
流程
- 我們在gitlab上上傳專案。就是正常的建立專案那種。
- 我們在jenkins上新建任務。填寫相應的資訊。
然後再填寫一些build時要執行的操作,build執行後要執行的操作。最後儲存即可。 - 我們在gitlab上建立webhook
- 進行測試,看看返回值,還有jenkins上有沒有在build。