GitLab搭配Jenkins實現可持續集成開發

一個人開發的時候

有時候我們做的項目非常小,比如一個手機端做行銷用的web project,有時候一個人就可以完成這個項目。
這時候通常就直接掛上FTP,讓Server端和Local端同步起來,當Local端有變動的時候就直接同步到Server上,讓客戶也可以看到完成的效果,再搭配一個Gitlab做Code的備份。

和夥伴一起開發的時候

當開發項目開始有一定規模以後,我們會將項目分工,除了Gitlab上我們會開不同的分支,Server上也會開設不同的階段。

比如我們正在開發/更新一套API,我們會分Development,Staging,Production,分別給後端開發者自己用、前端開發者調用、正式上線的產品使用。

接著,每一次我們更新好Code的時候,可能就要更新Development/Staging這兩個分支的內容。

Local端:

  1. commit/push Development分支的內容到Gitlab上。
  2. 切換到Staging分支上,merge Development的code,並且push到Gitlab上。

Server端:

  1. Terminal連接Server,cd到Development的folder中, pull Gitlab上development的code,
    執行npm install更新依賴包,pm2 restart app-development(重啟Server服務)。
  2. 在Server上,cd到Staging的folder中,pull Gitlab上Staging的Code。
    執行npm install更新依賴包,pm2 restart app-development(重啟Server服務)。

在還沒有引入Testing環節部署工作就已經有點繁雜了,我們應該要利用一些工具來幫助我們做自動部署的工作。

引入Jenkins實現可持續集成開發

我們可以通過引入Jenkins來幫我們完成自動部署的動作,當我們做類似push code 到Gitlab上的動作時,可以觸發一個事件,比如通知Jenkins進行部署的動作(也可以將測試流程引入),這樣我們就有更多的時間可以專注在開發上了。


安裝Jenkins

環境依賴

使用Jenkins需要用到JavaSDK(Java SE Development Kit),如果在terminal中輸入java -version,有看到版本號,代表有安裝了。

如果沒有安裝,可以到官方網站去下載 JavaSDK

安裝Jenkins

到官方下載Jenkins,安裝的默認路徑是/Applications/Jenkins/jenkins.war

安裝的過程中會需要admin驗證,Jenkins會下面「紅色路的路徑」中放一個密碼,可以直接通過「terminal vi 路徑」的方式打開看看,之後可以先選擇install suggest plugin先進去逛逛。

Jenkins設定

不論Jenkins的服務是架設在Local或者Server端,為了使Jenkisn可以自動的去執行任務(不用讓人輸入帳號密碼認證),我們可以為他們配置SSH Key。

SSH Key

這裡舉例在Mac上產生公鑰方法。

通過terminal來產生ssh key,其中passphrase是使用這個ssh key的密碼(我這裡設定密碼的時候發現Jenkins在溝通時會要求我輸入密碼,所以我後來在產生key的時候都將passphrase留空了)

ssh key 默認產生的路徑是在 ~/.ssh

其中id_rsa存著密鑰,id_rsa.pub存著公鑰,私鑰留給自己用,公鑰可以給你會用到的服務用,比如Gitlab。

如果不了解公鑰/私鑰的作用,可以查詢「公鑰密碼(public-key cryptography)」

在Jenkins中的Credentials管理你的key/證書,之後建立任務的時候可以直接選擇使用。

給Gitlab增加公鑰(public key)

可以通過下面的指令來測試ssh key 是否可以使用,其中<dir to key>是指前面生成公鑰/私鑰的路徑位置。


Jenkins&Gitlab配置Key

這裡我們選一個free style來做示範

這裡跳過基本資訊的填寫,我們直接來看如何讓Jenkins連上Gitlab。

如果剛才已經在Jenkins上建立證書,在這裡的Credentials就可以直接選擇,如果沒有就通過Add的方式新增了。

其中Responsitory URL在Gitlab項目中可以看到

增加任務

我們這裡舉一個例子,假設我們正在以nodeJS開發項目,我們希望可以在Jenkins上點一下Build就可以執行下面的動作:

  • 通過ssh連結Server。
  • cd到對應的路徑(比如開發中的項目)
  • 將Gitlab上develop分支的內容pull下來
  • 執行npm install(安裝依賴包)
  • 將環境切換到development(我們的nodeJS項目會根據環境改變一些參數,比如port)
  • 通過pm2來重啟服務

在「增加構建步驟」這裏,有一個Excute shell script on remote host using ssh可以滿足我們的需求。

在Exec command中可以寫入我們依次要執行的命令,這樣就ok了。

項目的最右側會有個時鐘的按鈕,點下去就會執行Build。

進入項目後,左側也可以看到Build的結果,如果build發生錯誤,藍色的球會變成紅色的。


重啓Jenkins服務方法

可以通過訪問 http://localhost:8080/restart 來重啟服務

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *