Werkerとは
CIサービスはいろいろとあるんですが、BitbucketのPrivateリポジトリで無料でCIを回したくてWerckerを使ってみることにしました。
ymlに設定を書くんですが、書き方がちょっと前に変わったらしく、調べても古い情報と新しい情報が混在していてなかなかに苦戦したのでメモ程度ですが書き残しておきます。
最終的な動作環境
早速ですがまず最終的な設定を晒しておきます。
今回使ったデータベースはMySQLです。
設定ファイル
以下の設定で動きました。(mysqlの環境変数は適当です)
box: phusion/passenger-ruby22
services:
- id: mysql
env:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_USER: test_user
MYSQL_PASSWORD: test_password
MYSQL_DATABASE: test_database
build:
steps:
- bundle-install
- rails-database-yml
- script:
name: rspec
code: bundle exec rspec
環境変数
Werckerでは、Applicationの設定から環境変数を設定出来ます。
僕の環境でCIを回すにあたって必要だった環境変数は以下のみでした。
WERCKER_BUNDLE_INSTALL_WITHOUT: development production
bundle install
に --without development production
を付けるための環境変数です。
必要かどうかはprojectで使っているgemによりますが、僕の場合 development,production では sql-server を使い、test では mysql を使いたかったため、 sql-server関連のgemを避けないとfailするという問題があったため必要でした。
基本的なプロジェクトでは必要ないと思います。
ちなみにソースは以下の部分です
設定ファイルの項目について
box
Rubyのdockerイメージを選択します。
これはwerckerのREADMEで使われているものをそのまま使用しました。
service
データベースを使う場合、serviceにデータベース用のdockerイメージを選択します。
また、データベースの設定はenvオプションに書きます。
- MYSQL_ROOT_PASSWORD
- mysqlのrootユーザのpasswordです。コンテナを作る際に必要です。
- MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE
-
rails-database-yml
のstepでテスト用のdatabase.ymlを作る際に必要です。以下ソースです。
-
bundle-install
railsプロジェクトの依存ライブラリのインストールします。普通のbundle install
です。
rails-database-yml
serviceで設定したenvを元にdatabase.ymlを生成します。
これがないとmysqlに接続出来なくてfailします。
rspec
最後に、scriptでrspecを実行します。
上記の設定で失敗する場合
上の設定で何度か成功したのですが、急にmysqlに接続できなくなってfailするようになりました。
以下の設定をbundle-install
の前に入れることで動くようになりました。
- script:
name: delete docker images cache
code: |
rm -rf $WERCKER_CACHE_DIR
詳細分かりませんが、キャッシュが悪さをしていたようです。