Travis CI
您可以針對一個或多個 Ruby 版本測試您的網站建置。以下指南將說明如何於 Travis 上設定免費建置環境,並與 GitHub 整合以進行拉取要求。
1. 啟用 Travis 和 GitHub
為您的 GitHub 儲存庫啟用 Travis 建置
- 前往 travis-ci.org 上的個人資料:https://travis-ci.org/profile/username
- 找到您有興趣為其啟用建置的儲存庫。
- 將儲存庫開關切換為藍色。
- 您可以按一下齒輪圖示來設定建置。進一步的設定會透過您的
.travis.yml
檔案進行。詳情如下。
2. 測試腳本
最簡單的測試指令碼執行 jekyll build
,並確保 Jekyll 不會無法建置網站。它不會檢查結果網站,但它確實確保正確建置所有項目。
在測試 Jekyll 輸出時,沒有比 html-proofer 更好的工具了。此工具會檢查結果網站,以確保所有連結和影像都存在。使用方便的 htmlproofer
命令列可執行檔來使用它,或撰寫一個使用此 gem 的 Ruby 指令碼。
將您想要執行並成功的命令儲存在檔案中:./script/cibuild
HTML Proofer 可執行檔
#!/usr/bin/env bash
set -e # halt script on error
bundle exec jekyll build
bundle exec htmlproofer ./_site
有些選項可透過命令列開關指定。查看 html-proofer
README,以取得有關這些開關的更多資訊,或在本地端執行 htmlproofer --help
。
例如,若要避免測試外部網站,請使用此命令
bundle exec htmlproofer ./_site --disable-external
HTML Proofer 函式庫
您也可以在 Ruby 指令碼中呼叫 html-proofer
(例如,在 Rakefile 中)
#!/usr/bin/env ruby
require 'html-proofer'
HTMLProofer.check_directory("./_site").run
選項提供給 .new
的第二個引數,並編碼在符號鍵控的 Ruby Hash 中。若要取得有關組態選項的更多資訊,請查看 html-proofer
的 README 檔案。
3. 組態您的 Travis 建置
此檔案用於組態您的 Travis 建置。由於 Jekyll 是使用 Ruby 建置,且需要 RubyGems 才能安裝,因此我們使用 Ruby 語言建置環境。以下是範例 .travis.yml
檔案,後面接著每行的說明。
注意:您也需要一個 Gemfile,Travis 會自動安裝根據參考的 gem 所產生的相依性。以下是範例 Gemfile
,其中包含兩個參考的 gem,「jekyll」和「html-proofer」
source "https://rubygems.org"
gem "jekyll"
gem "html-proofer"
您的 .travis.yml
檔案應如下所示
language: ruby
rvm:
- 2.6.3
before_script:
- chmod +x ./script/cibuild # or do this locally and commit
# Assume bundler is being used, therefore
# the `install` step will run `bundle install` by default.
script: ./script/cibuild
# branch whitelist, only for GitHub Pages
branches:
only:
- gh-pages # test the gh-pages branch
- /pages-(.*)/ # test every branch which starts with "pages-"
addons:
apt:
packages:
- libcurl4-openssl-dev
cache: bundler # caching bundler gem packages will speed up build
# Optional: disable email notifications about the outcome of your builds
notifications:
email: false
好,現在來解釋每一行
language: ruby
這行告訴 Travis 使用 Ruby 建置容器。它讓你的指令碼存取 Bundler、RubyGems 和 Ruby 執行時期。
rvm:
- 2.6.3
RVM 是流行的 Ruby 版本管理員 (例如 rbenv、chruby 等)。此指令告訴 Travis 在執行你的測試指令碼時要使用的 Ruby 版本。使用 已預先安裝在 Travis 建置 docker 映像中的版本,以加快建置速度。
before_script:
- chmod +x ./script/cibuild
建置指令碼檔案需要設定 可執行 屬性,否則 Travis 會因權限遭到拒絕的錯誤而失敗。你也可以在本地端執行,並直接提交權限,這樣就讓這個步驟變得無關緊要。
script: ./script/cibuild
Travis 允許你執行任何任意的 shell 指令碼來測試你的網站。一種慣例是將專案的所有指令碼放在 script
目錄中,並將你的測試指令碼稱為 cibuild
。這行可以完全自訂。如果你的指令碼不會有太大變動,你可以直接在此處撰寫你的測試咒語
install: gem install jekyll html-proofer
script: jekyll build && htmlproofer ./_site
script
指令可以是任何有效的 shell 指令。
# branch whitelist, only for GitHub Pages
branches:
only:
- gh-pages # test the gh-pages branch
- /pages-(.*)/ # test every branch which starts with "pages-"
您希望確保網站的 Travis 建置只在包含網站的分支上執行。確保此隔離的一種方法是在 Travis 設定檔中包含分支白名單。透過指定 gh-pages
分支,您將確保相關的測試指令碼(如上所述)只在網站分支上執行。如果您使用拉取要求流程來建議變更,您可能希望對建置強制執行慣例,例如所有包含編輯的分支都加上前綴,如上例中所舉的 /pages-(.*)/
正規表示式。
branches
指令是完全任選的。如果您略過它,Travis 將從推送到儲存庫的任何分支進行建置。
務必從 _config.yml
排除 vendor
Travis 會在其建置伺服器上將 vendor
目錄中的所有 gem 彙整成套件,而 Jekyll 會錯誤地讀取並爆炸。
exclude: [vendor]
若要加快建置速度,您應該快取 bundler
建立的 gem 套件。Travis 有針對此工具的 預先定義的快取策略,其中應該有執行此動作的所有預設設定檔。
cache: bundler
如果您對建置電子郵件通知不感興趣,您可以選擇使用此設定檔停用它們。Travis 支援廣泛的通知服務,您可能會發現 其他更實用的服務(例如 slack)。
notifications:
email: false
疑難排解
Travis 錯誤: 「您嘗試在變更 Gemfile 後以部署模式安裝。在其他地方執行 bundle install,然後將更新的 Gemfile.lock 加入版本控制。」
解決方法:執行 bundle install
本機並提交變更至 Gemfile.lock
,或從儲存庫中移除 Gemfile.lock
檔案,並在 .gitignore
檔案中新增一則項目,避免再次簽入。