WerckerでRailsアプリをCIしてSlack通知する

オラクルに買収されてから存在感が薄くなった(?)ような気がするWerckerですが、使う機会があったのでRailsでの設定をメモしておきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# wercker.yml
box:
id: ruby:2.5.1

services:
- id: mysql:5.7
env:
# rails-database-yml stepはrootユーザーを使わないのでランダムパスワードにしておく
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
# 以下の3つを設定する必要がある
MYSQL_DATABASE: rails_test
MYSQL_USER: rails
MYSQL_PASSWORD: password

- id: redis:4

build:
steps:
# Node.jsは入っていないのでインストールする
- script:
name: install node.js
code: curl -fsSL https://deb.nodesource.com/setup_8.x | bash - && apt-get install -qq nodejs
# bundleのキャッシュもしてくれる
# https://github.com/wercker/step-bundle-install
- bundle-install
# 自動的にdatabase.ymlの設定をしてくれる
# https://github.com/wercker/step-rails-database-yml
- rails-database-yml
- script:
name: copy .env
code: cp .env.sample .env
# Redisの接続先この方法でしか取れなかったけどもっといい方法ありそう
- script:
name: redis config
code: echo REDIS_URL=redis://$REDIS_PORT_6379_TCP_ADDR:$REDIS_PORT_6379_TCP_PORT >> .env
- script:
name: db setup
code: bundle exec rails db:schema:load db:seed_fu
- script:
name: rspec
code: bundle exec rspec

after-steps:
# Slack通知
# https://github.com/wercker/step-slack
- slack-notifier:
# 環境変数で設定
url: $SLACK_WEBHOOK_URL
channel: channel_name
username: wercker

環境変数はWeb画面上で設定し、wercker.yml内では$変数名で参照します。「Protected」にすると設定値が見えなくなるので、秘匿情報を設定するときに便利です。