Bitbucket Pipelines (CI) を使って気持ちよく開発する

サグーワークス開発チームの池添です。

今回はチーム目標「Comfortable development / 2.0」の取り組みの中から Bitbucket Pipelines (CI) の活用内容をお話していきます。 チーム目標に関しては下記記事に書いてありますのでぜひ読んでみてください。

tech.willgate.co.jp

Bitbucket Pipelines 利用に至ったきっかけ

チーム内では以前からコードレビューの時間短縮、負荷軽減のためにCIツールなどの導入を検討してきていました。

しかし、なかなか導入できなかった背景としてサービスの利用技術が古く、Composer が導入できない PHP のバージョンだったため、コードスタイルチェックのツールである phpcs やユニットテストのためのツールである phpunit が導入できないという状態が続いていました。

以前の記事でも紹介させていただきましたが、PHP のバージョンアップやフレームワークCakePHP のバージョンアップに成功し、今回 CI ツール導入にこぎつけることができました。また、チーム内にテストコードを書く文化を浸透させるためのCIツールとしての意味合いも強く、おかげで今では多くのテストコードが書かれています。

tech.willgate.co.jp

Bitbucket Pipelines とは

2016年10月から Atlassian が提供しているCIツールで、同じく Atlassian 提供の Bitbucket と連動させることができます。ビルド環境は Docker を採用しており自由にイメージを選択し、CI 環境を構築することができます。特徴としては、Bitbucket が公式で提供しているため連携のための手順が不要ですぐに使い始められることです。設定ファイルは bitbucket-pipelines.yml というものに記述していくのですが、docker-compose.yml のように記述していくことができるので直観的に書くことができとても使いやすいです。

ja.atlassian.com

他の CI ツールとの比較

導入の際に他の CI ツールとの比較もしたので載せておきます。

CIサービス名 料金体系 他と比べての目立つところ 2並列、月1500分のときの料金
Bitbucket Pipelines $10
500分まで無料
$10 / 1000分
弊社ではBitbucketを使っているので別ツール側の設定がほとんど不要, 実行時間に対して課金する(スケールは自動で行われる) $10
CircleCI $50
1並列で無料
2並列で$50
※時間はどこまで増えても金額が変わらない
最大で 24時間 * 60分 * 2並列 / day まで回せる
月あたり86400分くらい。
利用企業が多いので情報も多い
課金によって時間の制限が無い
スケールに対して課金する
$50
TravisCI $129
1並列で$69
2並列で$129
※時間はどこまで増えても金額が変わらない
最大で 24時間 * 60分 * 2並列 / day まで回せる
月あたり86400分くらい。
スケールに対して課金する
金額高め
$129
droneio 無料
ホスティング料金がかかる
自分たちでホスティングする必要がある
あまり情報が多くない
ホスティング料金
Bamboo $10
ホスティング料金がかかる
自分たちでホスティングする必要がある
弊社ではAtlassianクラウドを利用している以上はあえてBambooにする理由はない
$10+ホスティング料金
Jenkins 無料
ホスティング料金がかかる
自分たちでホスティングする必要がある
自分たちで細かな設定もいじるので運用に向けての検証などが必要
ホスティング料金
AWS CodePipeline $9.5 + 誤差
1並列あたり$1
最安インスタンスが $0.005 / 分
API Gateway, Lambda, S3 の軽微な金額が加わる
$1 + ($0.005 * 1500min)
複数のツールを組み合わせるためコストや利用がややこしい
AWSの安心ハイアベイラビリティ
$9.5+ホスティング料金

上記を踏まえ、2並列月1500分としたときの最安値を比べコストが一番かからず、かつ Bitbucket との親和性が高いという理由で弊社では Bitbucket Pipelines を採用しました。

Bitbucket Pipelines の利用例

私のチームでは下記内容をリモートブランチにプッシュしたタイミングで実行するように設定しています。自動で実行されることにより、コードレビューの負荷を下げることができています。

下記のようにステップごとに任意のコマンドを実行し、結果をコミット単位で確認することができます。 コミット単位以外にも手動実行や、スケジュール実行も可能です。

f:id:zoe302:20180413095744j:plain

また、下記のようにWebhooksを設定することでSlackなどとの連携も簡単にできます。

f:id:zoe302:20180413100854p:plain

f:id:zoe302:20180413100859p:plain

おわりに

いかがでしたでしょうか? Bitbucket Pipelines に限らず CI は日頃の開発作業を効率化するのにとてもいいツールです。

今回は社内でも一番使われている、テストの実行とコードスタイルチェック、ビルドの実行、Slack への通知を CI によって自動化し、効率化する方法を紹介しました。

紹介した内容以外にも、マージ済みのリモートブランチを削除したり、マージのタイミングで各環境へコードをデプロイしたり、スクリプトで表現できるものであれば大体自動化できるので、ほかにもいろいろ試してみるといいかもしれません。