Travis CI

Webサイトのビルドを1つ以上のバージョンのRubyに対してテストできます。次のガイドでは、プルリクエスト用のGitHub統合を使用して、Travisで無料のビルド環境をセットアップする方法を説明します。

1. TravisとGitHubを有効にする

GitHubリポジトリのTravisビルドを有効にするには

  1. travis-ci.orgであなたのプロフィールにアクセスしてください:https://travis-ci.org/profile/username
  2. ビルドを有効にしたいリポジトリを見つけます。
  3. リポジトリのスイッチを青色になるようにオンにします。
  4. オプションで、歯車のアイコンをクリックしてビルドを設定します。詳細な設定は、.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ファイルにエントリを追加して、再びチェックインされないようにします。

質問がありますか?

このガイド全体はオープンソースです。修正がある場合は編集するか、問題が発生してヘルプが必要な場合はヘルプを求めてください