【入門編】Bitbucket Pipelinesのビルド失敗を分析せよ!ログ解析を高度化するカスタムエラー通知の設計図 – バージョン管理・CI/CD活用バイブル

こんにちは。DevOpsの世界へようこそ。

現場で多くのチームを見てきましたが、Bitbucket Pipelinesを使いこなしているエンジニアと、そうでないエンジニアの間には「障害対応のストレス」に天と地ほどの差があります。

多くの人は、パイプラインが失敗するたびにBitbucketの画面を開き、数千行のログをスクロールして「どこで死んだか」を探します。ですが、優秀なエンジニアは違います。「失敗はシステムが検知し、即座にSlackに要約を届ける」。これがCI/CDの当たり前です。

今日は、あなたのBitbucket Pipelinesを「自律的に報告するシステム」へと進化させる、実践的な設計図を授けましょう。

—

1. Bitbucket Pipelinesの「深淵」に触れる

Bitbucket Pipelinesは、リポジトリ内の `bitbucket-pipelines.yml` で定義されたインフラです。しかし、標準的な設定では「失敗した」という事実しか通知されません。

今回目指すのは、「失敗した瞬間に、何が原因で、どのログが重要なのかをSlackに叩き込む」仕組みです。これを実装すれば、あなたはログの海を泳ぐ必要がなくなり、本来書くべきコードに集中できるようになります。

2. 基盤セットアップ:Slackとの連携

まずは、通知を受け取るための「窓口」を作りましょう。

1. [Slack API](https://api.slack.com/apps) で「Incoming Webhook」を作成し、URLを取得します。
2. Bitbucketの画面で [リポジトリ設定] > [リポジトリ変数 (Repository variables)] に移動します。
3. `SLACK_WEBHOOK_URL` という名前で、取得したURLを保存します(Secure設定を忘れずに!)。

3. 極限の通知テクニック:`after-script` の活用

Bitbucket Pipelinesには、成功・失敗に関わらず実行される `after-script` という強力なフックがあります。これを利用して、失敗した時だけ特定のスクリプトを走らせるのが「現場のハック」です。

以下が、そのための設定ファイル(`bitbucket-pipelines.yml`)のテンプレートです。

image: python:3.9 # 解析用スクリプトのためにPython環境を使用

pipelines:
default:

  • step:

name: Build and Test
script:

  • ./build.sh # あなたのビルドコマンド

after-script:
# パイプラインの終了ステータス($BITBUCKET_EXIT_CODE)が0以外ならエラー通知

  • |

if [ $BITBUCKET_EXIT_CODE -ne 0 ]; then
python3 notify_failure.py
fi

4. ログ解析の核:`notify_failure.py` を設計する

単に「失敗しました」と送るだけでは無能なBOTです。直近のログを抽出し、本当に必要な情報だけを抽出するスクリプトを仕込みます。

import os
import requests
import subprocess

def send_slack_notification():
# 失敗時のログを直近20行だけ取得する(これが現場の知恵です)
# 大量にログを出すとSlackが埋まるので、ラスト数行が鍵になります
try:
log_snippet = subprocess.check_output([“tail”, “-n”, “20”, “build.log”]).decode(“utf-8”)
except:
log_snippet = “ログの取得に失敗しました。”

webhook_url = os.getenv(“SLACK_WEBHOOK_URL”)
payload = {
“text”: f”🚨 Build Failed! \n Repo: {os.getenv(‘BITBUCKET_REPO_SLUG’)} \n Build: {os.getenv(‘BITBUCKET_BUILD_NUMBER’)} \n\n Error Snippet: \n {log_snippet}”
}
requests.post(webhook_url, json=payload)

if __name__ == “__main__”:
send_slack_notification()

5. なぜこの設計なのか?(現場の視点)

  • 「直近20行」の重要性: CIで失敗するケースの8割は、最後のエラーメッセージにヒントがあります。全文を読む必要はありません。
  • 可搬性: Pythonを使っているのは、多くのDockerイメージで標準的に動くからです。環境依存を極限まで減らしています。
  • 運用の自動化: この設定を一度テンプレート化してリポジトリのテンプレート(または `include` 機能)に含めてしまえば、全チームがこのレベルの通知を受け取れるようになります。

最後に:自動化は「あなたの時間」を奪い返します

これをマスターすれば、あなたは「ビルドが落ちていないかチェックする作業」から解放されます。

開発とは、本来「価値あるもの」を作る時間です。CI/CDの監視に疲弊するのは今日で終わりにしましょう。この小さな通知の仕組みが、あなたのチームのデリバリー速度を一段上のステージへと引き上げるはずです。

もし詰まったら、いつでも聞いてください。DevOpsの深淵はまだまだ奥が深いですよ。さあ、次のコミットを最高のものにしましょう!

タイトルとURLをコピーしました