CIにはwercker使っています。
werckerはDockerベースのCIサービスで、採用の理由は無料だからです。
werckerにはいろいろオシャレで便利な機能がある、
ようなのですが、すみませんぜんぜんわかりません。。。
最初はオシャレ機能を組み合わせていい感じに構築しようと思ったんですが、
ちょっとハマって面倒になって、けっきょく全部入りのDockerfileとwercker.ymlをベタ書きしました。。。
Dockerイメージ
githubにDockerfileにおいてDocker Hubに登録しています。
Dockerfileはこんな感じです。
FROM ubuntu:16.04 # OSのTimezoneをTokyoに RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \ echo 'Asia/Tokyo' > /etc/timezone && date # rubyとbundlerをインストール RUN cat /etc/apt/sources.list | sed -e 's|http://[^ ]*|mirror://mirrors.ubuntu.com/mirrors.txt|g' > /tmp/sources.list && mv /tmp/sources.list /etc/apt/sources.list RUN apt-get update && \ apt-get install -y software-properties-common git-core build-essential autoconf curl \ ruby ruby-dev zlib1g-dev libmysqlclient-dev imagemagick libmagickcore-dev libmagickwand-dev && \ gem install bundler --no-doc # elasticsearch用のjavaをインストール RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886 && \ echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" > /etc/apt/sources.list.d/webupd8team-java-trusty.list && \ echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && \ apt-get update && apt-get install -y oracle-java8-installer # elasticsearchをインストール RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys D88E42B4 && \ echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" > /etc/apt/sources.list.d/elasticsearch-2.x.list && \ apt-get update && apt-get install -y elasticsearch=2.3.3 # rootパスワードを"root"に設定してmysql-serverをインストール RUN echo "mysql-server mysql-server/root_password password root" | debconf-set-selections && \ echo "mysql-server mysql-server/root_password_again password root" | debconf-set-selections && \ apt-get -y install mysql-server mysql-client && \ echo "character-set-server = utf8mb4" >> /etc/mysql/mysql.conf.d/mysqld.cnf && \ echo "default-character-set = utf8mb4" >> /etc/mysql/conf.d/mysql.cnf # feature spec用のphantomjsをインストール ENV PHANTOMJS_VERSION 2.1.1 RUN apt-get install -y nodejs && \ cd /tmp && \ wget -q https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 && \ tar jxf phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 && \ mv phantomjs-$PHANTOMJS_VERSION-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs && \ rm -rf phantomjs-$PHANTOMJS_VERSION-linux-x86_64.tar.bz2 phantomjs-$PHANTOMJS_VERSION-linux-x86_64
OS、MWのバージョンなどは極力本番環境に合わせてます。
wercker設定
githubと連携設定をして、レポジトリ直下に以下のようなwercker.ymlを置いています。
box: mikeda/rails-test-with-elasticsearch build: steps: - script: name: start services code: | service elasticsearch start service mysql start - script: name: bundle install --without production code: bundle install --path $WERCKER_CACHE_DIR/bundle-install/ - script: name: setup db code: | /bin/cp config/database-wercker.yml config/database.yml RAILS_ENV=test bundle exec rake db:create RAILS_ENV=test bundle exec rake db:migrate RAILS_ENV=test bundle exec rake joblist:db:import_master_tables - script: name: rspec code: bundle exec rspec after-steps: - slack-notifier: url: $SLACK_URL channel: dev username: wercker notify_on: "failed"
テスト用のdb設定(config/database-wercker.yml)はこんな感じ。
test: database: joblist_test adapter: mysql2 encoding: utf8mb4 charset: utf8mb4 collation: utf8mb4_general_ci pool: 5 username: root password: root socket: /var/run/mysqld/mysqld.sock
after-stepsではテストに失敗したときにだけslackに通知を送っていています。
SlackのIncoming WebHooksのURLはベタ書きせずにWerckerのEnvironmentで変数化していますが、
まぁincomingだしベタ書きでもいい気はします。
まとめ
CIにはWercker使っています。
無料でこれだけの機能が使えるのは非常にありがたいです。
普段はDocker全く使ってませんが、こういう外部サービスでも手元で動作確認した本番環境と同じOS、MWが使えるのは環境構築やデバッグが楽でいいですね。