うちのいぬ Tech Blog

Tech Blog of Uchinoinu/My dog

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が変わりすぎてよくわからない

f:id:susanne:20160615083256p:plain

ここしばらく変化が激しい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したらいいのか

f:id:susanne:20160615084453p:plain

新しく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にも設定されていなかったので、追加しました。

f:id:susanne:20160615084717p:plain

追加の仕方は、以下の感じです。

Manage Workflowsを押下。

f:id:susanne:20160615085249p:plain

WorkflowやPipelineの設定画面につきます。 f:id:susanne:20160615085344p:plain f:id:susanne:20160615085413p:plain

ここでdeployというpipelineを追加しました。

追加する画面は以下。 f:id:susanne:20160615085513p:plain

名前を決めて、対応するwercker.ymlのpipelineの名前を指定して、動かすタイミングを指定します。

この次の画面でSCMに結果を通知するようにしておくと、GithubやBitbucketでwerckerの結果が見れるようになります。

f:id:susanne:20160615085808p:plain

pipelineを新しく追加すると、workflowにpipelineを追加出来るようになります。

これでbuildしてdeployへという流れが出来るようになります。

環境変数が読まれない

アプリ全体を対象にした環境変数では読まれないケースがありました。

pipelineごとに設定しておくと動きました。

Herokuへのdeployは公式ドキュメントのみを信じる

ネットに出回っている記事はあんまり信用せず、以下を参考にしたらうまくいきました。 devcenter.wercker.com

課題

after-stepがwerckerの画面上ではstepに入っていなくてなんか気持ち悪いので、別pipelineにできないかなぁって思いつつさほど問題ないので放置中です。

参考

qiita.com