Travis CI
Webサイトのビルドを1つ以上のバージョンのRubyに対してテストできます。次のガイドでは、プルリクエスト用のGitHub統合を使用して、Travisで無料のビルド環境をセットアップする方法を説明します。
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スクリプト(例:Rakefile)でhtml-proofer
を呼び出すこともできます
#!/usr/bin/env ruby
require 'html-proofer'
HTMLProofer.check_directory("./_site").run
オプションは、.new
への2番目の引数として指定され、シンボルキーのRubyハッシュでエンコードされます。設定オプションの詳細については、html-proofer
のREADMEファイルを確認してください。
3. Travisビルドの設定
このファイルは、Travisビルドを設定するために使用されます。JekyllはRubyで構築され、インストールにRubyGemsが必要なため、Ruby言語のビルド環境を使用します。以下は、サンプルの.travis.yml
ファイルと、各行の説明です。
**注:** Gemfileも必要です。Travisは、参照されているgemに基づいて依存関係を自動的にインストールします。これは、「jekyll」と「html-proofer」の2つのgemを参照するGemfile
の例です。
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など)。このディレクティブは、テストスクリプトを実行するときに使用するRubyバージョンをTravisに指示します。ビルドを高速化するには、Travisビルドdockerイメージにプリインストールされているバージョンを使用してください。
before_script:
- chmod +x ./script/cibuild
ビルドスクリプトファイルには、*実行可能*属性を設定する必要があります。設定しないと、Travisは許可拒否エラーで失敗します。これをローカルで実行し、権限を直接コミットすることもできます。そのため、この手順は不要になります。
script: ./script/cibuild
Travisでは、任意のシェルスクリプトを実行してサイトをテストできます。1つの規則は、プロジェクトのすべてのスクリプトをscript
ディレクトリに配置し、テストスクリプトをcibuild
と呼ぶことです。この行は完全にカスタマイズ可能です。スクリプトがあまり変更されない場合は、ここにテストの呪文を直接書くことができます
install: gem install jekyll html-proofer
script: jekyll build && htmlproofer ./_site
script
ディレクティブは、任意の有効なシェルコマンドにすることができます。
# branch whitelist, only for GitHub Pages
branches:
only:
- gh-pages # test the gh-pages branch
- /pages-(.*)/ # test every branch which starts with "pages-"
サイトを含むブランチでのみ、サイトのTravisビルドが実行されるようにする必要があります。この分離を確実にする1つの方法は、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
ファイルにエントリを追加して、再びチェックインされないようにします。
質問がありますか?
このガイド全体はオープンソースです。修正がある場合は編集するか、問題が発生してヘルプが必要な場合はヘルプを求めてください。