Bitbucket Pipelines:変数が空になる
Pipelines の変数にはいくつかの種類があり、それぞれ届くところが決まっています。ステップで変数を表示しても何も出ない、あるいはコマンドが変数の無いときのように動く場合は、たいてい次のどれかです。
デプロイ変数を、そのデプロイのステップの外で使っている
デプロイ変数は環境ごとの変数です。Repository settings の Deployments で環境を選んで設定し、同じ名前のリポジトリ変数やワークスペース変数より優先されます(Atlassian の デプロイを設定、監視する)。ステップがそれを受け取るのは、deployment にその環境の名前を書いたときです。
pipelines:
branches:
main:
- step:
deployment: production
script:
- echo "API URL: $API_URL" # production の値
deployment の無いステップや、別の環境を書いたステップには、production の値は来ません。名前がぶつかったときの順番は、Atlassian の変数とシークレットによると、パイプライン、デプロイ、リポジトリ、ワークスペースの順です。
保護された変数は、空ではなく隠れている
保護された変数(鍵のしるし)はログで伏せられ、その値と同じ文字列の出力も伏せられます。Atlassian の例では、echo "Deploying with key $API_KEY" はログに鍵ではなく $API_KEY と出ます。値が届いたかどうかを、値を出さずに確かめるには、長さを表示します。
- echo "API_KEY has ${#API_KEY} characters"
保護された変数は編集できず、置き換えるか消すかだけです。
前のステップで export した変数
ステップは毎回新しいコンテナで動くので、export の効き目はそのステップで終わります。次へ渡すには、Atlassian の Variable sharing(英語)の形を使います。$BITBUCKET_PIPELINES_VARIABLES_PATH のファイルに KEY=VALUE を書き、その名前を output-variables に並べます。
- step:
name: Generate version
script:
- export VERSION=$(date +%Y%m%d)-$BITBUCKET_BUILD_NUMBER
- echo "VERSION=$VERSION" >> $BITBUCKET_PIPELINES_VARIABLES_PATH
output-variables:
- VERSION
- step:
name: Deploy
script:
- echo "Deploying $VERSION"
- ファイルに書いても
output-variablesに無い名前は、次へ渡りません。 - 1つのパイプラインで渡せるのは 50 個、合わせて 100 KB までです。
- 届くのは、後に順番に続くステップです。並列のステップで書いた変数はどのステップにも届かない(同じ並列の組のほかのステップにも、その後のステップにも)、と Atlassian のページにあります。
ファイルをステップの間で渡すのはアーティファクトです。
スクリプトの外の $VAR
$VAR を埋めるのは、スクリプトの行が動くときのシェルです。image・ステップの name・deployment・キャッシュのパスのような、ほかの欄では ${{VAR}} を使います。Atlassian が2025年5月に足した書き方で(発表、英語)、YAML templating(英語)によると、パイプラインを読み込むとき、どのステップも動く前に埋まります。
image: ${{NODE_IMAGE}} # リポジトリ変数。たとえば node:20
- 使えるのは、保護されていないワークスペース変数とリポジトリ変数、既定の変数では
BITBUCKET_WORKSPACE・BITBUCKET_REPO_SLUG・BITBUCKET_BRANCH・BITBUCKET_COMMIT・BITBUCKET_PR_IDだけです。 - 保護された変数、デプロイ変数、
output-variablesで渡した変数は、その時点ではまだ使えません。 - 埋められなかった名前は
${{VARIABLE_NAME}}のまま残ります。ワークスペースかリポジトリの変数か、保護されていないか、大文字と小文字まで同じ綴りかを確かめるよう書かれています。
例外はビルド用イメージの認証です。Atlassian の例は、image の下に username: $DOCKER_HUB_USERNAME と password: $DOCKER_HUB_PASSWORD と書いています。
名前と、一部のビルドにしか無い既定の変数
- 名前は大文字と小文字を区別し、英数字とアンダースコアだけで、数字から始められません。
BITBUCKET_BRANCHはブランチのビルド、BITBUCKET_TAGはタグのビルド、BITBUCKET_PR_IDはプルリクのビルドにだけあります。タグのビルドにはブランチ名がありません。BITBUCKET_PARALLEL_STEPとBITBUCKET_PARALLEL_STEP_COUNTは、並列のステップの中だけです。PATHという名前の変数はビルドのPATHを置き換え、コマンドが動かなくなります(「command not found」)。- 1つのビルドの変数は、合わせて 120,000 文字までです(「Step exceeded processing limits」)。
IntelliJ IDEA で Bitbucket Pipelines を見る
Pipeline Inbox for Bitbucket Pipelines は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Bitbucket Cloud の全部のリポジトリのパイプラインを IDE のツールウィンドウに並べ、ステップ、失敗したステップと止まったコマンド、Bitbucket が書くそばから伸びるステップのログを見せます。一覧・ステップ・ログは無料。パイプラインの実行・やり直し・停止は Pro(月 US$1.50・30日の無料試用つき)。カスタムのパイプラインを実行するときは、宣言している変数ごとに入力欄が出ます。
Atlassian・Bitbucket・Bitbucket Pipelines は Atlassian の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「Host key verification failed」(SSH) · 「Cannot connect to the Docker daemon」 · 「authorization denied by plugin pipelines」(Docker) · 「Container 'docker' exceeded memory limit.」 · push したのに Pipelines が動かない · 「Container 'Build' exceeded memory limit.」 · 「Exceeded build time limit of 120 minutes」 · キャッシュが効かない · 「unexpected system error」 · 「command not found」 · サブモジュールを取ってこない · 「We couldn't clone the repository」 · 「No online runner available」 · 「No space left on device」 · 「Step exceeded processing limits」 · 次のステップにアーティファクトが無い · 前は通ったビルドが今は落ちる · Build setup に時間がかかる · ビルド時間を使い切った · 「Permission denied to update branch」 · 「You have reached your pull rate limit」(Docker Hub) · 「There is an error in your bitbucket-pipelines.yml」 · 「This pipeline was paused」(デプロイ) · テストの結果が出ない · IntelliJ IDEA の Bitbucket Pipelines 用プラグインの比較 · English