Posted at

お手軽CI Bitbucket Pipelinesの使い方

More than 1 year has passed since last update.

この記事はWanoアドベントカレンダーの15日目です。

(実は日曜日に公開を予定していたのですが、体調不良でダウンして書けなかったので、代わりに15日目にアサインしました。なおてぃ代わりに日曜日に書いてくれてありがとう。)

みなさん、Bitbucketは使っていますか?

プライベートリポジトリが無料で作れるBitbucketは公私ともにお世話になっております。

ちょっと前にうちの会社のプロジェクトでテストコードをゴリゴリ書くようになりまして、それに伴ってテストをやってる感を演出するために、Bitbucket付属のお手軽CIであるBitbucket Pipelinesを導入しました。

使ってみるとこれが地味に便利で、常時テストが回っているので、コードの品質を担保するのに十分に役立ってくれています。

今回はこの便利なBitbucket Pipelinesをもっと使っていこうぜ、という布教のため、記事を書いてみました。


Bitbucket Pipelinesって?

image-20171122014123793.png

↑コイツ

Bitbucket付属のCI。

なんやいろいろ好きなコードを走らせる事ができる。

最初から同梱されているので、すぐに誰でも使える(無課金ユーザーでも使える)

コードの品質が保てて世界が幸せになれる魔法のツール(言い過ぎ


特徴


便利なところ


悲しいところ


  • bitbucket-pipelines.ymlをcommitしてpushしないと動かない。CIを動かすために、修正してはcommit、修正してはcommitしてたら大量のcommitログができあがった(一番辛い)

  • 動くDockerイメージは全てlocalhostで動く。host名指定とかできない。この場合、DockerのMySQLに接続するときに、ホスト名をlocalhostとすると動かないので、気をつける必要がある。



  • bitbucket-pipelines.ymlは空文字を受け付けてくれない(validation failedとなる)ので、MySQLのユーザーを空パスワードで作るとかできない。docker imageのMYSQL_ALLOW_EMPTY_PASSWORDをしても同じ。


というわけで使ってみる。

以下の例は、社内のGo言語で書かれているプロジェクトの例。

MySQLのDokerイメージと、Go言語のDocker imageを持ってきて、ライブラリ管理ツールであるglideをインストールして、glide install、go testを実行するだけのシンプルなやつ。


SSH鍵の登録

まずはCIをまわしているときに使うSSH鍵を登録する。

スクリーンショット 2017-12-15 1.42.02のコピー.png

設定 -> PIPELINESの項目のSSH keys -> 作った秘密鍵と公開鍵を登録する。

今回はさらに他のプライベートリポジトリをcloneできるように、作ったSSH鍵の公開鍵をcloneしたいプロジェクトに登録する。

スクリーンショット 2017-12-15 2.00.34.png

cloneしたいリポジトリの設定 -> Access Keysから登録する。


bitbucket-pipelines.ymlの作成

bitbucket-pipelines.ymlを作成する。

細かい仕様はこちら。

https://confluence.atlassian.com/bitbucket/configure-bitbucket-pipelines-yml-792298910.html

以下はうちのプロジェクトの例。


bitbucket-pipeline.yml

image: golang:1.8.3 # CIをまわすDocker image。Docker Hubにあるやつはなんでも使える。

pipelines:
default:
- step:
script:
- curl https://glide.sh/get | sh # glideのインストール
- PACKAGE_PATH="${GOPATH}/src/bitbucket.org/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}"
- mkdir -pv "${PACKAGE_PATH}"
- tar -cO --exclude-vcs --exclude=bitbucket-pipelines.yml . | tar -xv -C "${PACKAGE_PATH}" # リポジトリのファイルをDocker内に展開
- cd "${PACKAGE_PATH}"
- glide install
- go test -c -i -o hoge.test bitbucket.org/wanocoltd/hoge # テスト用バイナリを生成
- ./hoge.test -test.v # テスト実行
services:
- database

definitions:
services:
database:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: hogehoge
MYSQL_DATABASE:hoge_db
MYSQL_USER: 'root'


ちなみにbitbucketは、bitbucket-pipelines.ymlファイルのバリデータを提供してくれているので、commitする前にそれとなく確認する事ができる。

https://bitbucket-pipelines.atlassian.io/validator


CIの実行

先ほどのymlファイルをcommitしてpushすると、bitbucketのpipelinesのコンソール上で動き始める。

image-20171122021418086.png

Happy!!🎉


まとめ

こんな感じで導入はかなり手軽なので、みんな使うと良いかと思います。

Bitbucketと契約しているプランにより、1ヶ月の間に回せるテストの時間が決まっていますが、特定のブランチだけテストを回す、なんてこともできるので、みんな気軽にymlファイルをpushしちゃえばいいじゃない!!


(余談)Slackへの通知設定

テストを回すリポジトリの設定 -> Webhooksより、slackのBitbucketのWebhookURLを設定します。そのときに、以下のように、「ビルド ステータスが更新された」にチェックを入れれば、Pipelinesが動いた時のイベントを受け取る事ができます。

スクリーンショット 2017-12-15 2.20.19.png

Slackでの通知内容なこんな感じ。

失敗時。

スクリーンショット 2017-12-15 2.25.15.png

成功時。

スクリーンショット 2017-12-15 2.25.53.png