Bitbucketで管理しているRailsプロジェクトを新しくなったWerckerを通じてHerokuにデプロイしてみた
English Version is here uchinoinu.hatenablog.jp
やりたいこと
Bitbucketにpushしたら、werckerが動いて、パスしたら、Herokuにデプロイされる
local --(git push origin master)--> bitbucket --> wercker --(passしたら)--> heroku
問題
Werckerが変わりすぎてよくわからない
ここしばらく変化が激しいwercker
無料で使えるのがとっても嬉しいのですが、使い方がなんともわかりづらい
ドキュメントも少なかったり、旧バージョンで現在は使えない内容の記事と今使える内容の記事の区別がしづらかったり、
変化が激しくって、正しくキャッチアップが難しかったりします。(ブログかツイッターを追うしか無い)
現在(2016/6/15段階)はDocker仕様でworkflowやpipelineといった仕組みが取り入れられています。
数年前使っていたwercker.ymlはもはや動かず、GithubやBitbucketとの連携も変わって来ていたり、します。
新しいwercker.yml
割りと最小限のものを晒します。
buildというpipelineでは、bundle installして、postgresを指定して、rspecを回して、結果をslackに通知。 deployというpipelineでは、herokuにデプロイして、migrateして、結果をslackに通知。
box: ruby build: steps: - bundle-install - rails-database-yml: service: postgresql-docker - script: name: echo ruby information code: | echo "ruby version $(ruby --version) running" echo "from location $(which ruby)" echo -p "gem list: $(gem list)" - script: name: rspec code: bundle exec rspec after-steps: # notify to Slack - wantedly/pretty-slack-notify: webhook_url: $SLACK_WEBHOOK_URL_BUILD channel: $SLACK_WEBHOOK_CHANNEL_BUILD deploy: steps: - heroku-deploy: install-toolbelt: true key: $HEROKU_KEY key-name: HEROKU_KEY_PAIR user: $HEROKU_USER app-name: $HEROKU_APP_NAME - script: name: Update database code: heroku run rake db:migrate --app $HEROKU_APP_NAME after-steps: - wantedly/pretty-slack-notify: webhook_url: $SLACK_WEBHOOK_URL_DEPLOY channel: $SLACK_WEBHOOK_CHANNEL_DEPLOY
ハマったところ
何をCreateしたらいいのか
新しくwerckerを使い始めたとき、applicationを作るものだと思っていたら、stepを作るという記事もあり、なんなんだと思っていました。
今回はapplicationを使いました。問題なさそう。
buildしか動かない deployはどこいった?
wercker.ymlでdeployが記載されてても、werckerのデフォルトではbuildしか動きませんでした。
というのも、werckerでのCIはworkflowという流れをとっていて、workflowはpipelineという要素で構成されているようです。
pipelineはwercker.ymlでいうところの、一番高い要素 buildとかdeployとかになります。 (pipelineの中に色々なstepがあります。)
デフォルトではbuildしかpipelineにもworkflowにも設定されていなかったので、追加しました。
追加の仕方は、以下の感じです。
Manage Workflowsを押下。
WorkflowやPipelineの設定画面につきます。
ここでdeployというpipelineを追加しました。
追加する画面は以下。
名前を決めて、対応するwercker.ymlのpipelineの名前を指定して、動かすタイミングを指定します。
この次の画面でSCMに結果を通知するようにしておくと、GithubやBitbucketでwerckerの結果が見れるようになります。
pipelineを新しく追加すると、workflowにpipelineを追加出来るようになります。
これでbuildしてdeployへという流れが出来るようになります。
環境変数が読まれない
アプリ全体を対象にした環境変数では読まれないケースがありました。
pipelineごとに設定しておくと動きました。
Herokuへのdeployは公式ドキュメントのみを信じる
ネットに出回っている記事はあんまり信用せず、以下を参考にしたらうまくいきました。 devcenter.wercker.com
課題
after-stepがwerckerの画面上ではstepに入っていなくてなんか気持ち悪いので、別pipelineにできないかなぁって思いつつさほど問題ないので放置中です。