ARTICLE

Travis CI 入門:GitHub + Travis CI で継続的インテグレーション

1. Travis CI とは

Travis CI はオープンソースコミュニティのためにホストされた CI(継続的インテグレーション)サービスです。

継続的インテグレーションってなんだ?

継続的インテグレーション、CI(英: continuous integration)とは、主にプログラマーのアプリケーション作成時の品質改善や納期の短縮のための習慣のことである。エクストリーム・プログラミング (XP) のプラクティスの一つで、狭義にはビルドやテスト、インスペクションなどを継続的に実行していくことを意味する。特に、近年の開発においては、継続的インテグレーションをサポートするソフトウェアを使用することがある。

引用: 継続的インテグレーション - Wikipedia

Travis CI は GitHub と連携しており、CI したいリポジトリーを接続しておくと、Travis CI がコミットを取得して、設定ファイル通りにビルド・テストしてくれます。そしてビルド・テストに失敗するとメール(他も可)で結果が送られてきます。

以下のような流れでビルド・テストが行われます。

 +---> [Developer] --- (1) ---> [GitHub] <---+
 |                                           |
 +----- (3) ----- [Travis CI] ----- (2) -----+

(1) ソースコミット
(2) 未テストのコミット取得
(3) テスト結果を送信

そもそもの CI を深く知りたい方は以下の書籍が参考になると思います。

GitHub と CI との連携は書籍 GitHub実践入門 が参考になるかもしれません。

2. Travis CI のサポート言語

以下のプログラミング言語をサポートしています。

  • C
  • C++
  • Clojure
  • Erlang
  • Go
  • Groovy
  • Haskell
  • Java
  • JavaScript (with Node.js)
  • Perl
  • PHP
  • Python
  • Ruby
  • Scala

3. ビルドのライフサイクル

  1. 言語の切り替え
  2. GitHub からプロジェクトのリポジトリーをクローン
  3. before_install スクリプトを実行
  4. クローンしたディレクトリーに移り、依存関係のインストールコマンドを実行
  5. before_script スクリプトを実行
  6. テスト用の script コマンドを実行
  7. after_script スクリプトを実行
  8. after_success または after_failure スクリプトを実行

4. 設定ファイル(.travis.yml)

設定ファイルはリポジトリーのルートディレクトリー直下に .travis.yml という名前で配置します。

このファイルの中には、以下のようなことを YAML 形式で記述します。

  • プロジェクトで使用しているプログラミング言語
  • ビルド前に実行しておきたいコマンドまたはスクリプト(例えばインストールや依存ライブラリの更新など)
  • テストスイートを走らせるためのコマンド
  • ビルドの失敗を通知する先(Eメール、Campfire、チャットルーム)

5. 設定ファイル(.travis.yml)の設定例と解説

language: php
php:
  - "5.4"
  - "5.3"
before_install:
  - command1
  - command2
before_script:
  - php composer.phar install
  - php app/console xxxx
script:
  - phpunit -c app
  - phantomjs xxxx/run-jasmine.js xxxx/test.html

notifications:
  emails:
    - aaaaa@un.ko
    - bbbbb@un.ko
  on_success: always # default: change
  on_failure: always

まず、language にはプログラミング言語を指定しています。

language: php

次にバージョンです。ここは言語によってキーが変わります。

php:
  - "5.4"
  - "5.3"

before_install には事前に何かをインストールしておく必要がある場合などのためにコマンドを記述することができます。

before_install:
  - command1
  - command2

script にはテストスイートを走らせるためのコマンドを記述することができます。

# コマンドが一つだけの場合
script: phpunit -c app

# 複数のコマンドがある場合
script:
  - phpunit -c app
  - phantomjs xxxx/run-jasmine.js xxxx/test.html 

notifications にはテストの結果を通知する先を指定できます。

notifications:
  emails:
    - aaaaa@un.ko
    - bbbbb@un.ko
  on_success: always # default: change
  on_failure: always

on_success は成功時、on_failure は失敗時にどうするかを設定できます。

それぞれ、always change never の 3 種類あり、以下のような意味になります。

種類説明
always通知を受け取る
change成功から失敗、または失敗から成功に変わったときに通知を受け取る
never通知を受け取らない

6. 設定ファイル(.travis.yml)の検証

設定ファイルが正しいかどうかは Validate your .travis.yml file でチェックすることができます。

7. Travis CI との接続方法

  1. GitHub の公開リポジトリに .travis.yml をアップする
  2. Travis CI に移動し、GitHub アカウントでログインする
  3. 設定から該当リポジトリのスイッチを ON にする(OFF が見えている状態)

ここまでで一先ず繋ぎこみは完了です。

次に繋ぎこみの確認です。

  1. 該当リポジトリに何かをプッシュする
  2. Travis CI のサイト上で確認しているとリポジトリがリストアップされる
  3. Travis CI からメールが届く

このスクリーンショットは通らなかったテストが通ったときに送られてくるメールです。

.travis.yml に何も記述していない場合は以下のようなメールが届きます。
The build failed.

失敗し続けると…
The build is still failing.

失敗していたテストが通ると…
The build was fixed.

on_successalways してテスト成功するとこんなメールがきます。
The build passed.

これらのメールもしくは Travis CI のリポジトリ詳細にアクセスするとビルドの詳細な情報を見ることができます。
Current Build

ぜひぜひやってみてください。

8. Tips

GitHub の README.md で見かける以下の画像を表示させる方法

Build Status

ステータスイメージの URL 仕様

https://travis-ci.org/[YOUR_GITHUB_USERNAME]/[YOUR_PROJECT_NAME].png

Markdown 形式で表現するとこのようになります。

[![Build Status](https://secure.travis-ci.org/[YOUR_GITHUB_USERNAME]/[YOUR_PROJECT_NAME].png?branch=[YOUR_REPOSITORY_BRANCH]](https://travis-ci.org/[YOUR_GITHUB_USERNAME]/[YOUR_PROJECT_NAME])

Travis CI 側のリポジトリ詳細画面で自動生成されたものをコピペで使うこともできます。

Status Images をクリックして、
Status Images 1 - Travis CI Repository Page

欲しい形式をコピー&ペーストして使います。
Status Images 2 - Travis CI Repository Page

適宜置き換えて設置してください。

9. 参考書籍・記事

参考書籍1参考書籍2参考書籍3

  1. ken1flan reblogged this from tetsuwo
  2. tsuyoshi reblogged this from tetsuwo
  3. yungsang reblogged this from tetsuwo
  4. tetsuwo posted this
Zenback読み込み中です。