1. 程式人生 > >搭建gitlab+jenkins+webhooks自動部署環境

搭建gitlab+jenkins+webhooks自動部署環境

概述

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

可能的原因是

  1. webhook的連結沒寫對。頁面上提供的gitlab webhook url其實是有點問題的,我試了好幾次都不成功。後面給出解決方案。
  2. 沒有填secret token。secret在Advance選項裡面,要點選generate按鈕。
  3. 專案的URL與secret token不對應。每個專案都有對應的webhook,對應著url和secret token。
  4. 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。

流程

  1. 我們在gitlab上上傳專案。就是正常的建立專案那種。
  2. 我們在jenkins上新建任務。填寫相應的資訊。
    在這裡插入圖片描述
    在這裡插入圖片描述
    在這裡插入圖片描述
    然後再填寫一些build時要執行的操作,build執行後要執行的操作。最後儲存即可。
  3. 我們在gitlab上建立webhook
    在這裡插入圖片描述
  4. 進行測試,看看返回值,還有jenkins上有沒有在build。
    在這裡插入圖片描述