與 Jenkins 的持續整合
將 rvm 與 Jenkins 整合不僅讓您能使用不同的 gemset 測試多個專案,同時還能讓您同時針對多個 Ruby 測試不同的程式碼庫。以下指南主要以 Ubuntu 安裝為基礎,但這些說明應與任何平台相容。
請注意,這些說明是根據 Nick Quaranto 在 thoughbot 部落格上的 精彩部落格文章 為基礎,並改編為更通用的用途。
一般概觀
一般來說,您需要
- 在特殊使用者上設定 Jenkins
- 設定 rvm(可選擇使用 rvm 設定自動安裝 Ruby)
- 在 shell 任務中使用 rvmrc(如果可能的話)/ bundle 安裝,並將 -e 傳遞給 shebang。
- 如果 rvm 不可使用,請手動取得來源。
如需更詳細的指南,請參閱下方
步驟 1. 取得並安裝 Jenkins
第一步是在您選擇的系統上安裝 Jenkins。目前,有幾種方法可以取得
- 透過作業系統層級套件安裝(在我們的案例中,是 debian 套件)
- 手動下載並設定
- 使用 jenkins.rb(它會綑綁常見的外掛程式等)
如果您選擇方法二或三,您需要先為 jenkins 建立一個新使用者(通常稱為「jenkins」)。在我們的案例中,我們將使用第一個選項,遵循 jenkins 官方網站上的說明。此方法會自動為我們設定 init.d,也會自動建立 jenkins 使用者。
如果手動設定,我建議透過 jenkins.rb 安裝 jenkins,以獲得它提供的便利性。
步驟 2. 設定 RVM
下一步可以說是最重要的 - 您需要為上一步中新增的 jenkins 使用者設定 rvm。首先,我們需要安裝所有依賴項。RVM 會自動安裝建置每個 Ruby 所需的項目。
sudo apt-get install curl bison build-essential zlib1g-dev libssl-dev libreadline5-dev libxml2-dev git-core
請注意,如果您也想要針對 jruby 執行 CI,您需要安裝更多套件,包括 jdk - 請參閱上面連結的 ubuntu 頁面以取得更多資訊。
接下來,您需要以 ubuntu 使用者身分登入,在本例中 - jenkins。
sudo -Hiu jenkins
這應該會讓您進入已載入 bash 的 shell。因此,現在您可以執行 rvm 安裝 頁面上的說明 - 我們強烈建議使用 rvm-install-head 方法,僅為 jenkins 使用者設定。
接下來,我們需要將 rvm 新增到我們的 shell 設定檔 - 在本例中,我們會將下列內容新增到 ~/.bashrc 的結尾
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
此外,在 ubuntu 中,預設的 .bashrc 有一行包含「&& return」 - 如果您的系統也是如此,請務必依照 rvm 安裝說明將其替換為 if。
最後,如果我們登出並以 jenkins 身分重新登入,現在應該會載入 rvm。您可以透過輸入以下內容來確認
type rvm | head -1
應該會產生「rvm is a function」。
最後,我們會以 jenkins 使用者將下列行新增到 ~/.rvmrc,以讓實際流程整體而言更輕鬆
rvm_install_on_use_flag=1 rvm_project_rvmrc=1 rvm_gemset_create_on_use_flag=1
有關每個含義的說明,請參閱 rvmrc 頁面,其中詳細說明每個含義 / 本文件適當的部分 - 此方法的基本概念是,當我們第一次使用 Ruby / gemset 時,rvm 會自動安裝 Ruby 並建立 gemset。
步驟 3. 設定 Jenkins / 新增專案
對於實際的繁重工作,我們將使用執行 shell 指令碼與 jenkins 的功能。
我們建議的設定是使用下列指令碼與 jenkins 選項「執行 Shell 指令碼」
#!/bin/bash # Use the correct ruby rvm use "ruby@gemset" # Set "fail on error" in bash set -e # Do any setup # e.g. possibly do 'rake db:migrate db:test:prepare' here bundle install # Finally, run your tests rake
-e 選項會導致 bash 在任何指令碼結束時傳回錯誤。這是讓指令碼按預期運作的關鍵。
請注意,在某些設定中,環境可能無法正確載入。在這些情況下,您應該在 shebang 下方新增下列內容
source "$HOME/.rvm/scripts/rvm"
如果您想要使用矩陣建置,此方法表示您可以定義環境變數,例如 build_ruby,並將矩陣欄位設定為您想要使用的每個 ruby,並用以下內容取代 rvm 使用列
rvm use "$build_ruby@gemset-to-use"
從 git 儲存庫複製時,您需要確保為 jenkins 使用者新增 ssh 金鑰。
最後,如果您想要自動使用 rvmrc 中的 ruby/以這種方式處理設定,您可能想要新增
[[ -s ".rvmrc" ]] && source .rvmrc
取代 rvm 使用指令/相關設定。