こんにちは。DevOpsの世界へようこそ。
Bitbucket Pipelinesを使っていると、ふと気づく瞬間があります。「あれ?まだ月末まで1週間あるのに、ビルド時間が枯渇しかけている…?」
スタートアップや小規模チームにとって、CI/CDのビルド分数は貴重な「通貨」です。深夜の不要なコミットで貴重なリソースを浪費し、本当にリリースが必要な重要なタイミングでビルドが止まってしまう。これほど悲劇的なことはありません。
今日は、Bitbucket Pipelinesのビルドを賢く制御し、コストを最適化するための「現場のハック」を伝授します。これをマスターすれば、リソース効率は劇的に向上し、チームの財布にも優しくなれますよ。
—
1. なぜ「実行の抑制」が必要なのか?
Bitbucket Pipelinesのビルド分数は月単位の定額制ですが、使い切れば追加課金が発生します。多くのチームがやりがちなミスは、「自動テストが全てのリポジトリで、すべてのコミットに対して、24時間無差別に行われていること」です。
- 開発環境の不要なビルド: 深夜の作業や、何度も繰り返されるPush。
- 非クリティカルなブランチ: マージ直前までテスト不要なブランチでのビルド実行。
これらを制御し、必要な時だけ、必要なリソースを回す。これが「賢い開発現場」の鉄則です。
—
2. まずはここから: `bitbucket-pipelines.yml` の基本設定
まずは基本の「お作法」を確認しましょう。全ファイルが同じ設定で動くのは非効率です。特定のブランチや条件で実行を制限する設定が第一歩です。
bitbucket-pipelines.yml
image: node:18
pipelines:
branches:
# メインブランチは常にテストを実行
master:
- step:
name: Build and Test
script:
- npm install
- npm test
# feature系ブランチは特定条件以外はスキップさせる等の工夫が可能
‘feature/’:
- step:
name: Lint only
script:
- npm run lint
—
3. 【奥義】APIでパイプラインを「予約制」にする
ここからが本題です。標準機能には「特定の時間以外は止める」というスイッチはありません。そこで、Bitbucket APIとGitHub Actions(またはCronサーバー)を組み合わせて、「パイプラインの実行権限を管理する」というハックを使います。
戦略:APIによる実行制御
Bitbucketの[Pipeline API](https://developer.atlassian.com/cloud/bitbucket/rest/api-group-pipelines/)を使えば、特定のタイミングで「パイプラインのトリガーを無効化(一時停止)」したり、「特定の時間だけ実行を許可する」ことが可能です。
実践的なワークフロー:
1. 深夜帯(例: 0時〜8時): APIを叩いてパイプラインのトリガーを無効化する。
2. 日中: APIを叩いてトリガーを有効化する。
以下は、`curl` で実行を一時停止するコマンドの例です。これをどこかのサーバーや、軽量なCI環境でCron実行させます。
パイプラインを一時停止するコマンドのサンプル
WorkspaceとRepoを指定して、特定のステータス制御を行います
curl -X POST “https://api.bitbucket.org/2.0/repositories/{workspace}/{repo_slug}/pipelines/config/schedule” \
-u “username:app-password” \
-H “Content-Type: application/json” \
-d ‘{
“enabled”: false
}’
※この設定には、Bitbucketの「App Password」が必要です。権限設定は `Pipelines` の書き込み権限を付与してくださいね。
—
4. 精度を高めるための「条件付き実行」ハック
APIで止めるのが大げさだと感じるなら、`bitbucket-pipelines.yml` 内の `condition` を活用しましょう。特定の時間帯のみ実行を許可するスクリプトをステップの先頭に仕込むのが最も簡単で強力です。
pipelines:
default:
- step:
name: Check Business Hours
script:
# 日本時間(JST)で9時〜18時以外ならビルドを強制終了(成功扱い)させる
- HOUR=$(date +%H)
- if [ “$HOUR” -lt 9 ] || [ “$HOUR” -ge 18 ]; then echo “Outside business hours. Skipping…”; exit 0; fi
# 以降に本来のビルド処理を記述
- npm run build
解説:
このスクリプトは、指定した時間外であれば `exit 0` (正常終了)で処理を打ち切ります。これにより、貴重なビルド分数を消費することなく、パイプラインを「空振り」させることが可能です。
—
5. 最後に:エンジニアとしてのマインドセット
ツールをただ使うのではなく、「そのツールがどうリソースを消費しているか」を可視化し、制御下に置く。 これができるエンジニアは、どんなプロジェクトでも重宝されます。
- まずは「何に一番時間を使っているか」を分析する(BitbucketのInsights機能を見てください)。
- 次に「本当に今必要か」を判断する仕組みを入れる。
- 最後に、チーム全体でそのコスト意識を共有する。
今回紹介した「時間制限」のハックは、小さな工夫ですが、チームの生産性を大きく変えるポテンシャルを秘めています。ぜひ、次のスプリントから導入してみてください。
わからないことがあれば、いつでもまた聞きに来てください。あなたの開発ライフが、より効率的で刺激的なものになることを応援しています。それでは、良いコードライフを!