Bitbucket Pipelines で次のステップにアーティファクトが無い
あるステップがファイルを作って artifacts に並べたのに、次のステップが tar: can't open 'dist/package-4.tar.gz': No such file or directory のような行で失敗します(コミュニティの質問から)。Bitbucket は、ステップの最後のコマンドの後でそのアーティファクトをアップロードし、後のステップのコマンドの前に戻します。まずログで両方の端を見て、それから Atlassian が挙げる原因をたどります(Bitbucket Pipeline issues due to Artifacts related issues と Pipeline artifacts)。
受け渡しの両方の端を見る
- ファイルを作るステップでは、ログの Build teardown を開きます。Atlassian のサポートは、ある利用者に、そこに「Successfully uploaded artifact」と出ているか、アップロードのエラーが出ているかを尋ねています(コミュニティの質問)。
- ファイルを使うステップでは、Build setup を開き、アーティファクトをダウンロードしているかを見ます。
- ファイルを作るはずのコマンドの後に
ls -lR dist(アーティファクトのフォルダ)を足し、パイプラインをもう一度動かします。パターンが探す場所にファイルがあるかが分かります。
原因
- パターンが探す場所にファイルが無い。コマンドかプロジェクトの設定が、別のフォルダに書いたか、書いていません。上の質問では、
ifの中に残っていたexit 0が、ファイルを書く前にステップを成功で終わらせていました。 - パスがクローンのフォルダの外。アーティファクトのパスは
$BITBUCKET_CLONE_DIRからの相対です:dist/**は使えますが、/tmp/**は使えません。ファイルはクローンのフォルダの中に書きます。.や..の付いたパスは使えず、*で始まるパターンは YAML で引用符が要ります。 - 2つのステップが同じ並列の組にある。並列のステップのアーティファクトは、同じ組のほかのステップには届かず、その後のステップにだけ届きます。上の
tarの質問の原因はこれでした:デプロイのステップが、ビルドと同じparallelの中にありました。 - 次のステップがダウンロードしない。
download: falseは全部のアーティファクトを飛ばします。download:の一覧は、並べた名前のアーティファクトだけを取ります。type: scopedのアーティファクトは、ほかのステップには決してダウンロードされません(ログ・レポート・スクリーンショット向け)。 - 圧縮して 1 GB を超えた。そのステップの Build teardown に、アップロードしないという知らせが出て、ビルドはそのまま次のステップへ進みます。代わりにビルドを失敗にしてほしいという要望 BCLOUD-17145 は「Gathering Interest」のままです。フォルダを複数のアーティファクトに分けるか、ファイルを小さくします。
- 期限が切れた。アーティファクトは、作ったステップから14日間残ります。その後に手動のデプロイのステップを始めることはできません:Deploy のボタンが灰色になり「Artifacts have expired」と出ます。そのステップに
download: falseがあっても同じです(BCLOUD-22653・未解決)。回避策は、パイプライン全体をもう一度動かすことです。
- step:
name: Build
script:
- npm run build
- ls -lR dist
artifacts:
- dist/**
- step:
name: Deploy
script:
- ./deploy.sh
アーティファクトのスクリプトで「Permission denied」
ダウンロードしたアーティファクトの権限は 644(-rw-r--r--)になるので、アーティファクトで届いたスクリプトは、実行できるように戻すまで動きません(Pipeline artifacts のページ):
script: - chmod +x deploy.sh - ./deploy.sh
失敗したステップのアーティファクト
既定では、ステップは成功したときだけアーティファクトをアップロードします。失敗の後にほしい試験のレポートやスクリーンショットは、名前の付いた書き方で capture-on: failed か capture-on: always にします:
artifacts:
- name: Screenshots
type: scoped
paths:
- screenshots/**
capture-on: failed
IntelliJ IDEA で失敗したコマンドを見る
Pipeline Inbox for Bitbucket Pipelines は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Bitbucket Cloud の全部のリポジトリのパイプラインを、ステップと一緒に IDE のツールウィンドウに並べます。失敗したパイプラインでは、ステップが失敗したコマンドとその最後の行を見せるので、No such file or directory の行がログを開かずに見えます。ステップのログは IDE で開いて検索できるので、Build teardown と Build setup のアーティファクトの行もそこで探せます。アーティファクトの期限が切れたときの回避策は、パイプライン全体をもう一度動かすことです。Pro なら Run again で、同じコミットを IDE からもう一度ビルドできます。一覧・ステップ・ログは無料。実行・やり直し・停止は Pro(月 US$1.50・30日の無料試用つき)。
Atlassian・Bitbucket・Bitbucket Pipelines は Atlassian の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページはそのいずれとも提携しておらず、承認も受けていません。
ほかに:キャッシュが効かない · 「Step exceeded processing limits」 · 「Exceeded build time limit of 120 minutes」 · 「No space left on device」 · 「No online runner available」 · 「We couldn't clone the repository」 · サブモジュールを取ってこない · 「command not found」 · 「unexpected system error」 · push したのに Pipelines が動かない · 「Container 'Build' exceeded memory limit.」 · 「Container 'docker' exceeded memory limit.」 · 前は通ったビルドが今は落ちる · 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