サグーワークス開発チームの池添です。
今回はチーム目標「Comfortable development / 2.0」の取り組みの中から Bitbucket Pipelines (CI) の活用内容をお話していきます。 チーム目標に関しては下記記事に書いてありますのでぜひ読んでみてください。
Bitbucket Pipelines 利用に至ったきっかけ
チーム内では以前からコードレビューの時間短縮、負荷軽減のためにCIツールなどの導入を検討してきていました。
しかし、なかなか導入できなかった背景としてサービスの利用技術が古く、Composer が導入できない PHP のバージョンだったため、コードスタイルチェックのツールである phpcs やユニットテストのためのツールである phpunit が導入できないという状態が続いていました。
以前の記事でも紹介させていただきましたが、PHP のバージョンアップやフレームワークの CakePHP のバージョンアップに成功し、今回 CI ツール導入にこぎつけることができました。また、チーム内にテストコードを書く文化を浸透させるためのCIツールとしての意味合いも強く、おかげで今では多くのテストコードが書かれています。
Bitbucket Pipelines とは
2016年10月から Atlassian が提供しているCIツールで、同じく Atlassian 提供の Bitbucket と連動させることができます。ビルド環境は Docker を採用しており自由にイメージを選択し、CI 環境を構築することができます。特徴としては、Bitbucket が公式で提供しているため連携のための手順が不要ですぐに使い始められることです。設定ファイルは bitbucket-pipelines.yml というものに記述していくのですが、docker-compose.yml のように記述していくことができるので直観的に書くことができとても使いやすいです。
他の 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 の利用例
私のチームでは下記内容をリモートブランチにプッシュしたタイミングで実行するように設定しています。自動で実行されることにより、コードレビューの負荷を下げることができています。
- Lint
- UnitTest
- build
下記のようにステップごとに任意のコマンドを実行し、結果をコミット単位で確認することができます。 コミット単位以外にも手動実行や、スケジュール実行も可能です。
また、下記のようにWebhooksを設定することでSlackなどとの連携も簡単にできます。
おわりに
いかがでしたでしょうか? Bitbucket Pipelines に限らず CI は日頃の開発作業を効率化するのにとてもいいツールです。
今回は社内でも一番使われている、テストの実行とコードスタイルチェック、ビルドの実行、Slack への通知を CI によって自動化し、効率化する方法を紹介しました。
紹介した内容以外にも、マージ済みのリモートブランチを削除したり、マージのタイミングで各環境へコードをデプロイしたり、スクリプトで表現できるものであれば大体自動化できるので、ほかにもいろいろ試してみるといいかもしれません。