Bitbucket Pipelines:テストの結果が出ない
Pipelines は、テストの画面の出力を読んで結果を出しているわけではありません。テストが書いた JUnit 形式の XML を、ビルドのディレクトリの下のいくつかのフォルダで探し、見つかった失敗を出します。何も出ないときは、探す場所にファイルが無かったか、失敗したテストが無かったかのどちらかです。
Pipelines が探す場所
Atlassian の Get started with tests in Pipelines(英語)に場所の一覧があります。ビルドのディレクトリ /opt/atlassian/pipelines/agent/build から、3階層の深さまで探します。
./**/surefire-reports/**/*.xml ./**/failsafe-reports/**/*.xml ./**/test-results/**/*.xml ./**/test-reports/**/*.xml ./**/TestResults/**/*.xml
ファイルは JUnit か Maven Surefire の XML である必要があり、言語は問いません。Maven の Surefire プラグインは、設定を足さなくても target/surefire-reports に書きます。
Jest と Mocha は、既定では別の場所に書く
Atlassian の Jest と Mocha の例は、レポーターを足すだけで、ファイルの置き場所までは書いていません。それぞれのレポーターの既定の出力先は、上のフォルダの外です。
- jest-junit は、Jest を動かしたディレクトリに
junit.xmlを書きます。 - mocha-junit-reporter は
./test-results.xmlを書きます。test-resultsというフォルダではなく、ファイルです。
どちらも環境変数で出力先を変えられるので、ステップで探す場所に入れます。
script:
- npm ci
- JEST_JUNIT_OUTPUT_DIR=./test-results npm test
# Mocha の場合:MOCHA_FILE=./test-results/junit.xml npm test
Atlassian のほかの例は、はじめから探す場所に書いています。pytest --junit-xml=test-results/junit.xml、phpunit --log-junit ./test-reports/junit.xml、Playwright の ['junit', { outputFile: 'test-results/junit.xml' }] です。
コンテナの中で書いたレポート
docker build・docker run・Docker Compose の中でテストを動かすと、XML はそのコンテナに残ります。ビルドのディレクトリから探すスキャナーには見えません。レポートを外へ写すか、ビルドのディレクトリ($BITBUCKET_CLONE_DIR)の下のフォルダをマウントします。その外へのボリュームは断られます(「authorization denied by plugin pipelines」)。
- docker run -v $BITBUCKET_CLONE_DIR/test-results:/app/test-results my-app npm test
ほかのフォルダに置くとき
ほかの場所のレポートには、Atlassian のページが test-reports という種類のアーティファクトでパスを書く例を載せています。
artifacts:
upload:
- name: "custom test reports"
type: "test-reports"
paths:
- "custom_path/*.xml"
- "**/custom_path2/*.xml"
モノレポなどで3階層より深いところにあるレポートも、同じ形で並べられます。
失敗が無い、または多すぎる
- ステップのログの画面は、失敗したテストを理由とスタックトレースつきで目立たせます。全部通ったときは目立たせるものが無く、Tests タブも見るべき失敗があるときだけ出る、とページにあります。
- 出るのは、失敗した結果の最初の 100 件までです。
- TestNG などは、同じテストをスイート名を変えて複数のレポートに書くことがあり、同じテストが何度も並びます。
リポジトリの Tests の画面
同じページには、リポジトリの横のメニューの Tests の説明もあります。不安定なテストや隔離したテスト、失敗の率、テストごとの履歴をまとめて見る画面で、Pipelines の Standard と Premium のプラン向けのオープンベータです。結果を集めるのは、既定のブランチと、リポジトリの管理者が Repository settings の Tests の Branch tracking で選んだ最大4つのブランチです。それ以外のブランチの結果は、ここには出ません。
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 の商標、Docker は Docker, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・Docker・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」(デプロイ) · 「Not authorized to perform sts:AssumeRoleWithWebIdentity」(OIDC で AWS) · サービスに「Connection refused」(MySQL・PostgreSQL・Redis) · IntelliJ IDEA の Bitbucket Pipelines 用プラグインの比較 · English