複数の Jenkins と Travis のビルドの失敗が最速で分かる Stoplight を Heroku にデプロイ

複数のビルドサーバを一つのUIで確認できるStoplight - cynipeと読む を見て「これだっ!」と、この前まで隣だった人が叫んでいたので Heroku にデプロイしてみました。

iPad で表示したままにしておいて、チームのメンバが見えるところにおいておくと XFD っぽくていい感じです。

前提

以下が準備済みである必要があります。

  • Git がインストールされている
  • Heroku にアカウントをもっている
  • Heroku コマンドがインストールされている
  • Heroku のアカウントに公開鍵が登録されている

手順

1. stoplight を clone する

$ git clone git://github.com/customink/stoplight.git
$ cd stoplight


2. ログ出力パスの変更

Heroku は tmp/ ディレクトリ以外のファイル書き込みを禁止しているのですが、ログ出力で log/ ディレクトリに書き込みをしようとしているのでこのままでは実行時にエラーを吐いてしまします。

$ git grep application.log
config/boot.rb:$logger = ::Logger.new('log/application.log')
lib/stoplight/providers/provider.rb:  $logger = Logger.new('log/application.log')

そこでそれぞれのログ出力パスを tmp/ ディレクトリ以下に変更します。

$ git diff 
diff --git a/config/boot.rb b/config/boot.rb
index 036429e..2db6b98 100644
--- a/config/boot.rb
+++ b/config/boot.rb
@@ -16,5 +16,5 @@ require 'application'
 
 require 'logger'
 class ::Logger; alias_method :write, :<<; end
-$logger = ::Logger.new('log/application.log')
+$logger = ::Logger.new('tmp/application.log')
 use Rack::CommonLogger, $logger
diff --git a/lib/stoplight/providers/provider.rb b/lib/stoplight/providers/provider.rb
index 9bcadd9..77b7f44 100644
--- a/lib/stoplight/providers/provider.rb
+++ b/lib/stoplight/providers/provider.rb
@@ -7,7 +7,7 @@ require 'uri'
 
 unless $logger
   require 'logger'
-  $logger = Logger.new('log/application.log')
+  $logger = Logger.new('tmp/application.log')
 end
 
 # Provider is an abstract class that all providers inherit from. It requires that a specified format be returned. This way, stoplight

変更を commit しておきます。

$ git commit -am "change log file path"


3. 設定

設定は servers.yml に記載します。

example ファイルがあるので、これをコピーして編集します。

$ cp config/servers.yml.example config/servers.yml

以下のような内容を追記します。編集内容は 本家 README を参考にしましょう。

-
  type: 'jenkins'
  url: JenkinsのURL
-
  type: 'travis'
  url: http://travis-ci.org
  owner_name: ユーザ名

config/servers.yml は .gitignore で無視されるので、無視されないようにします.

$ git diff
diff --git a/.gitignore b/.gitignore
index e9461a4..1496818 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,6 @@
 .bundle
 .rvmrc
 .sass-cache
-config/servers.yml
 log/*.log
 tmp
 vendor/ruby

設定を commit します。

$ git add .
$ git commit -a -m "settings"

4. Procfile を消す

Procfile の内容が実行されますが Heroku では失敗します。
運用環境では必要無いので消してしまいましょう。

$ rm Procfile
$ git commit -a -m "remove Procfile"

5. デプロイ

いよいよデプロイします。heroku create 時に URL が表示されるのでメモしておきましょう。
(忘れた場合でも Heroku にログインすれば確認できます)

$ heroku create
Creating stark-badlands-1640... done, stack is cedar
http://stark-badlands-1640.herokuapp.com/ | git@heroku.com:stark-badlands-1640.git
Git remote heroku added

$ git push heroku master

6. 確認する

デプロイ時に表示された URL に index.html をつけてアクセスします。

今回の場合なら http://stark-badlands-1640.herokuapp.com/index.html となります。


まとめ

実際は試行錯誤しましたが、まとめてみると簡単にデプロイできるようになりました。

ビルドサーバが VPS などグローバルにアクセスできるところにあるのであれば、Heroku へのデプロイを検討してみてもいいかもしれません。