ビルド システムを Bitbucket Cloud と連携する
ビルド システムやベンダーが Bitbucket Cloud と既に連携している可能性があります。連携済みの場合は、次の図のように、ビルドをトリガーする各コミットでビルドのステータスを確認できます。
ビルドのステータスが表示されない場合、ビルド ツールでスクリプトを実行できるのであれば、ビルドを独自に連携できます。連携するには、Bitbucket でコミットを更新するビルドの最後の手順の後にスクリプトを追加します。
以下の Python スクリプトは、最後のビルド ステップに追加する処理の例を提供します。このスクリプトは、ツールの更新が環境変数に基づくのか、スクリプト内で手動で入力できるかに応じて、次のフィールドが含まれます。
フィールド | 更新方法 | 説明 |
---|---|---|
key | ビルド | ビルドのステータスを、同じコミットに関連付けられた他のステータスと区別するキー。スクリプトでは、例として BUILD_ID を使用します。 |
state | ビルド、またはスクリプト内で手動 | コミットのステータスを示します。スクリプトはビルドの後に実行されるため、スタータスは ビルド システムに応じて、ステータスを提供する環境変数を使用するか、ビルドの出力内容に応じて (既に含まれるステータスを使用して) 実行される 2 つの個別スクリプトを作成することができます。 |
name | ビルド | ビルドの名前。スクリプトでは、例として JOB_NAME を使用します。 |
url | ビルド | ビルドの詳細が記載されたページへの URL。スクリプトでは、例として |
description | ビルド、またはスクリプト内で手動 | ビルドの説明。お使いのビルド システムに応じて、説明を提供するための環境変数を使用するか、実行前にスクリプトに説明を追加できます。スクリプトは、例として The build passed. を使用します。 |
owner | スクリプト内で手動 | リポジトリ オーナーのアカウント。スクリプトでは、例として
|
| スクリプト内で手動 | リポジトリ名。スクリプトでは、例として
|
revision | ビルド | コミットの SHA1 値とビルドのステータス。スクリプトでは、例として
|
auth | スクリプト内で手動 | 認証情報。ユーザー名とパスワードを入力できます。リポジトリがワークスペースの一部である場合、ユーザー名とパスワードの組み合わせ、またはワークスペース名と API キーを入力できます。スクリプトでは、例として auth_user および auth_password を使用します。 |
#!/usr/bin/env python
import os
import requests
# Use environment variables that your CI server provides to the key, name,
# and url parameters, as well as commit hash. (The values below are used by
# Jenkins.)
data = {
'key': os.getenv('BUILD_ID'),
'state': 'SUCCESSFUL', # or 'FAILED' for a script that runs when the build fails
'name': os.getenv('JOB_NAME'),
'url': os.getenv('BUILD_URL'),
'description': 'The build passed.'
}
# Construct the URL with the API endpoint where the commit status should be
# posted (provide the appropriate owner and slug for your repo).
api_url = ('https://api.bitbucket.org/2.0/repositories/'
'%(owner)s/%(repo_slug)s/commit/%(revision)s/statuses/build'
% {'owner': 'emmap1',
'repo_slug': 'MyRepo',
'revision': os.getenv('GIT_COMMIT')})
# Post the status to Bitbucket. (Include valid credentials here for basic auth.
# You could also use team name and API key.)
requests.post(api_url, auth=('auth_user', 'auth_password'), json=data)