Bitbucket PipesでCI/CDを「魔法」に変える——数行のコードで実現する開発の民主化
こんにちは。現場の最前線でコードとインフラの狭間を走り続けているエンジニアです。
皆さんのプロジェクトで、こんな「負の連鎖」に陥っていませんか?
「新しいプロジェクトを作るたびに、数十行の`bitbucket-pipelines.yml`をコピペして、微妙な修正でハマる…」
「セキュリティスキャンやデプロイ手順がチームごとにバラバラで、全社の標準を統一できない…」
その悩み、「Bitbucket Pipes(パイプ)」で完全に解決しましょう。今回は、CI/CDの設定を「再利用可能なブラックボックス」へと昇華させ、複雑なパイプラインを数行に削ぎ落とす、極限の自動化術を伝授します。
—
1. Bitbucket Pipesとは何か?:CI/CDの「部品化」
Bitbucket Pipesは、一言でいえば「CI/CDのためのプラグイン」です。
通常、`bitbucket-pipelines.yml`にシェルスクリプトを長々と書くと、メンテナンスが地獄になります。Pipesを使えば、特定の処理(テスト、デプロイ、通知など)をDockerコンテナに詰め込み、他のプロジェクトから「一行で呼び出す」ことが可能になります。
メリット:
- DRY原則(Don’t Repeat Yourself): ロジックは一箇所で管理。
- 標準化: チーム全体で同じテスト手順、同じデプロイ手順を強制できる。
- 可読性: 複雑な処理が隠蔽され、パイプラインが驚くほどスッキリする。
—
2. 【実践】カスタムPipeを作ろう:Hello Worldを超えて
今回は「社内標準のテスト・デプロイ手順」を実行する独自のPipeを作ります。
必要なのは、DockerとBashの知識だけです。
ステップ1:ディレクトリ構成を作成
まずは専用のリポジトリを作成します。
my-custom-pipe/
├── Dockerfile # コンテナの定義
├── pipe.sh # 実行ロジック
└── pipe.yml # メタデータ(必須!)
ステップ2:実行ロジック (pipe.sh)
ここで、実際の処理を書きます。変数は環境変数として受け取れます。
!/bin/bash
pipe.sh
echo “🚀 チーム標準のパイプラインを開始します…”
チーム標準のテストを実行
echo “🧪 テストを実行中…”
npm test || { echo “テスト失敗!”; exit 1; }
デプロイ処理
echo “📦 サーバーへデプロイ中…”
echo “ターゲット環境: $TARGET_ENV”
ここにデプロイ用の独自スクリプトを記述
echo “✅ 全てのタスクが完了しました!”
ステップ3:定義ファイル (pipe.yml)
BitbucketがこのPipeをどう扱うかを定義します。
pipe.yml
name: my-company-deploy
description: 社内標準のテストとデプロイを実行するPipe
image: node:18-alpine # 必要な実行環境を指定
script: pipe.sh
ステップ4:Dockerfile
FROM node:18-alpine
COPY pipe.sh /usr/local/bin/pipe.sh
RUN chmod +x /usr/local/bin/pipe.sh
ENTRYPOINT [“/usr/local/bin/pipe.sh”]
—
3. 作成したPipeを公開・利用する
作成したディレクトリをGitリポジトリとしてBitbucketにプッシュします。
その後、利用したいプロジェクトの`bitbucket-pipelines.yml`を以下のように書き換えるだけです。
導入前(地獄のコピペ)
script:
- npm install
- npm test
- ./deploy_script.sh
- curl -X POST https://slack.com/… # 通知処理など延々と続く…
導入後(神の領域)
pipelines:
default:
- step:
name: チーム標準のCI/CD実行
image: node:18-alpine
pipes:
- pipe: bitbucket.org/your-workspace/my-custom-pipe:1.0.0
variables:
TARGET_ENV: “production”
たったこれだけです。プロジェクトのメンバーは、内部で何が起きているかを気にする必要はありません。ただ「標準を呼び出す」だけで、常に最新のデプロイ手順が保証されるのです。
—
4. 現場で震えるための極意
最後に、この手法を運用する上での「現場の知恵」を授けます。
1. バージョン管理の徹底:
Pipeのタグ(`:1.0.0`など)を必ず使いましょう。最新版(`latest`)に依存すると、ある日突然全プロジェクトのデプロイが壊れるリスクがあります。
2. キャッシュの活用:
Pipe内で`npm install`などを行う場合、Bitbucketのキャッシュ機能を活用する設計にしてください。ビルド時間が数分短縮されます。
3. エラーハンドリング:
`pipe.sh`の最後は必ず `exit 0` か `exit 1` で明示的に終了させましょう。これが不完全だと、失敗しているのにパイプラインが「成功」と判定される事故が起きます。
—
最後に
パイプラインを「書く」作業から、「選んで使う」作業に変えること。これがDevOpsの究極形です。
最初は面倒に感じるかもしれませんが、一度この仕組みを作れば、チームの生産性は劇的に向上し、あなたは「CI/CDの苦しみ」から解放されます。
さあ、あなたのチームの「標準」を、この一行に込めてみませんか?応援しています!