sohatach's blog

http://github.com/soha

Travis CIで継続インテグレーション、Coverallsでテストカバレッジ確認

Travis CIという継続インテグレーション(自動ビルドや自動テストを継続的に行う)サービスを使ってみました。
https://travis-ci.org/

1. 動作確認対象レポジトリの用意

Travis CI上でビルドやテストを実行するには、自身のGitHubのアカウントの対象となるレポジトリが必要になりますが、
今回は動作確認を目的としているので、以下のレポジトリをfolkし使用させていただきました。

https://github.com/skinny-framework/skinny-framework-example

以下のように本家のGitHubのサイトからforlし、自身のGitHubのアカウントのレポジトリとします。

f:id:sohatach:20150215233026p:plain

2. Travis CI上でのGitHubレポジトリの有効化

この状態でTravis CIにログイン(ログインには、GitHubアカウントが必要)すると
アカウント設定の画面にて、自身のレポジトリ一覧が表示されますので、
skinny-framework-exampleレポジトリのTravic CIとの連携をONにします。

f:id:sohatach:20150215233127p:plain

OFFの状態からONにしました。

これでTravis CIを使う準備はできましたが、デフォルト設定では、レポジトリに対し
なんらかのcommitのpushをフックしてビルドが起動するようですので、
まずはなんでもいいのでcommitを作りpushします。

3. Travis CIの設定ファイル

ここcommitを作る前にTravis CIの設定ファイルを確認します。
プロジェクト直下の.travis.xmlというファイルが該当します。
動作確認した状態では以下のようなものになっていました。

language: scala
scala: 2.11.5
sudo: false
jdk: oraclejdk8
script: "./travis.sh"
after_success: sbt coveralls
env:
  global:
    secure: ほげほげ

ここで特筆すべきは、scriptの項目がTravis CIでテストを実行させるコマンドになります。
travis.shの中身を見ると以下のようになっていました。

#!/bin/bash
./skinny db:migrate test && ./skinny test:coverage

ここは使用するフレームワークなどにより記載内容は異なるものになると思います。

after_successについては、テスト実行時に実行される処理です。
ここでは、sbtのcoverallsプラグインを使用して、coverallsにテスト結果を送信しています。
env.global.secureは、coverallsで使用するレポジトリを特定するためのものです。
coverallsから発行されるREPO_TOKENをそのまま記載しGitHubに載せるのは望ましくないとのことから
このように暗号化して記載することが推奨されているようです。

参考
・Go + Travis CI + Coveralls でCI環境を作る
http://qiita.com/dmnlk/items/3fb4e0abb98e39fee275
「Tokenを暗号化してセキュアにする」のところ。
4. フック用新規commitの作成(Coverallsのsecure設定)

新規commitは、ダミーファイルを作るなりどんな変更でもいいのですが、
さきの.travis.xmlのenv.global.secureは、レポジトリ毎に有効な値のため、
folkした今回のレポジトリでは、オリジナルの値は使えません。
そのため今回のレポジトリ用の値を取得します。

まずはCoverallsのサイトにアクセスし、REPO TOKENの値をメモします。
ここでは、Travis CIと同様にまずは、レポジトリを有効にします。

f:id:sohatach:20150215233144p:plain

(REPO TOKENの値は、ログインしていればCoverallsのレポジトリ画面右側に表示されてるようです)
この値をもとにenv.global.secureの値を生成します。
実行にはRubyの動作環境が必要です。

>gem install travis
travisパッケージをインストールし、以下のコマンドを実行します。

>travis encrypt COVERALLS_TOKEN=メモしたREPO_TOKENの値
画面上にsecureの値が表示されるため、これを.travis.xmlに上書きコピーします。

>git add .travis.xml

>git commit
適当にコミットログを記載し、commitします。

>git push
clone元へのpushなので、デフォルトで引数不要です。
このあたりは単純にGitHubの話ですね。

5. Travis CI,Coverallsサイト上での結果確認

Travis CI上で処理が実施されているはずなので、サイトにアクセスしてみます。
今回のケースでは以下のURLとなります。(見るだけであればログインせずとも誰でも可能なようです)
https://travis-ci.org/soha/skinny-framework-example

f:id:sohatach:20150215233245p:plain
f:id:sohatach:20150215233304p:plain

ずらずらと処理が実行されています。


Travis内で実行されている主な処理は以下の通りです。

$ git clone --depth=50 --branch=master git://github.com/soha/skinny-framework-example.git soha/skinny-framework-example

GitHubより該当ソースをcloneしています。(Travis内のワークディレクトリに)

$ export COVERALLS_TOKEN=[secure]

Coverallsの認証設定をしています。

$ jdk_switcher use oraclejdk8
$ export JVM_OPTS=@/etc/sbt/jvmopts
$ export SBT_OPTS=@/etc/sbt/sbtopts
$ java -version
$ javac -version

.travis.xmlの設定に従いJava環境まわりの設定をしています。

$ ./travis.sh

テストscriptの実行

$ sbt coveralls

Coverallsへのテスト結果反映


今回のCoverallsのサイトのURLは、以下の通りです。
こちらもログインせずとも参照はできるようです。
https://coveralls.io/r/soha/skinny-framework-example

f:id:sohatach:20150215233556p:plain