Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
64
Help us understand the problem. What are the problem?

More than 3 years have 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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
64
Help us understand the problem. What are the problem?