BitbucketとSlack、Wercker連携してみる


こんにちは。

本記事はIwate Developers Advent Calendar 2014の8日目になります。

今回はRailsアプリケーションでBitbucketにpushして、werckerのbuild結果をslackに表示するところまでやります。
今回は既にBitbucketにレポジトリが配置してあることを前提としています。

## BitbucketとWercker連携

まずはWerckerにログインしてください。その後、add applicationをサイドバーから選択します。

![Screen Shot 2014-12-08 at 1.02.48.png](https://qiita-image-store.s3.amazonaws.com/0/14066/0e291471-9714-3d01-b4c2-1de5f15b3544.png "Screen Shot 2014-12-08 at 1.02.48.png")


次にBitbucket連携してます。
![wercker.png](https://qiita-image-store.s3.amazonaws.com/0/14066/8889d762-dd13-96ca-1747-29ba8e7d2a22.png "wercker.png")

そうすると、レポジトリを見れるようになるので好きなアプリケーションを選択してください。

![wercker.png](https://qiita-image-store.s3.amazonaws.com/0/14066/5d2006fa-aa5b-f5c4-165f-14c756067526.png "wercker.png")

アクセス権について、設定します。今回は一番上の「Add the deploy key to the selected repository for me」を選択肢ます。

![Banners_and_Alerts_and_wercker.png](https://qiita-image-store.s3.amazonaws.com/0/14066/c846d0e1-b1af-efd1-4615-4a4803c9fb04.png "Banners_and_Alerts_and_wercker.png")

ここではwercker.ymlを生成されますが、特に何もせずに「Next Step」しましょう。

![wercker.png](https://qiita-image-store.s3.amazonaws.com/0/14066/c6eaba40-7dc6-3b05-9f75-ab6a9a64f918.png "wercker.png")

最後にFinishをクリックします。
![wercker.png](https://qiita-image-store.s3.amazonaws.com/0/14066/02a8fa56-935e-938e-90b2-871735aa0187.png "wercker.png")

次はWerckerとSlack連携していきましょう。

## WerckerとSlack連携

SlackにログインしてサイドバーのIntegrationsをクリックします。

![Integrations___offsidenow_Slack.png](https://qiita-image-store.s3.amazonaws.com/0/14066/2b0125af-eb54-f5fc-e924-88be421e0e99.png "Integrations___offsidenow_Slack.png")

そこから、Incoming WebHooksを選択します。

![Integrations___offsidenow_Slack.png](https://qiita-image-store.s3.amazonaws.com/0/14066/e21ba4ca-898c-c596-ce2c-6827179ddf86.png "Integrations___offsidenow_Slack.png")

次は投稿するChannelを選択します。
![Team_Integration___offsidenow_Slack.png](https://qiita-image-store.s3.amazonaws.com/0/14066/9f5c2737-6b97-b6f0-2edc-0becd423b380.png "Team_Integration___offsidenow_Slack.png")

そして、WebHookのURLをコピーしてください。これはwercker.ymlの設定で使います。

![Team_Integration___offsidenow_Slack.png](https://qiita-image-store.s3.amazonaws.com/0/14066/83d640b0-1086-b775-f845-f5f62841d587.png "Team_Integration___offsidenow_Slack.png")

## wercker.ymlを設定

wercker.ymlはRailsのトップディレクトリに保存します。
wercker.ymlのafter-stepsに各種、設定を追記します。先ほどコピーしたURLをここのYOUR_WEBHOOK_URLに貼り付けくてださい。

```yml:wercker.yml
box: wercker/rvm
# Build definition
# See the Rails section on the wercker devcenter:
# http://devcenter.wercker.com/articles/languages/ruby/settingup-rails4.html
# You will want to define your database as follows:
# services:
#   - wercker/postgresql
# See more about services on our devcenter:
# http://devcenter.wercker.com/articles/services/
build:
    steps:
        # Uncomment this to force RVM to use a specific Ruby version
        # - rvm-use:
        #       version: 2.1.5

        # A step that executes `bundle install` command
        - bundle-install

        # A step that prepares the database.yml using the database in services
        # - rails-database-yml

        # A custom script step, name value is used in the UI
        # and the code value contains the command that get executed
        - script:
            name: echo ruby information
            code: |
                echo "ruby version $(ruby --version) running"
                echo "from location $(which ruby)"
                echo -p "gem list: $(gem list)"

    after-steps:
        - wantedly/pretty-slack-notify:
            team: YOUR_TEAM
            webhook_url: YOUR_WEBHOOK_URL
            channel: YOUR_CHANNEL
```

では、

ここでは、簡易的にmaster pushしちゃってますが、ご了承ください。

```bash:
$ git add wercker.yml
$ git commit -m 'add wercker.yml'
$ git push origin master
```


いかがでしょうか。buildが成功したら、Slackに以下のようなものが投稿されたと思います。もしできなかった方はWerckerからbuildのリンクをクリックして原因を調べてみてください。

![Screenshot_12_8_14__1_27.png](https://qiita-image-store.s3.amazonaws.com/0/14066/abfd9ae5-01be-2226-8bac-e5939d9e5232.png "Screenshot_12_8_14__1_27.png")

## 最後に

駆け足ではありましたが、BitbucketとSlack、Wercker連携してみるところまでやってみました。かなり簡単にできたと思います。

ここまで、全部無料ですので、プライベートプロジェクトではこの組み合わせを使ってみてはいかがでしょうか。





## 参考記事
- [bitbucketとwerckerで０円CIをする](http://razokulover.hateblo.jp/entry/2014/05/21/000306)
- [werckerからslackにビルド結果のnotificationを送る](http://qiita.com/nekogeruge_987/items/f2c9bc1e258128d49373)
- [http://qiita.com/tbpgr/items/7705995c9f679d97a382](http://qiita.com/tbpgr/items/7705995c9f679d97a382)