'Heroku CI: テスト実行のライフサイクルに関する技術的詳細'
最終更新日 2022年08月10日(水)
Table of Contents
この記事では、テスト実行中に Heroku CI によって実行されるイベントのシーケンスについて説明します。このシーケンスの詳細は、失敗するテスト実行をデバッグしている場合、またはカスタム開発ツールや Heroku buildpack に Heroku CI のサポートを追加している場合に役立ちます。
手順 1: アプリの CI 固有のコピーがプロビジョニングされる
- Performance-M dyno にアプリのコピーがプロビジョニングされます (詳細は、「Dyno Types」(dyno タイプ) を参照)
- CI アプリは Heroku Dashboard のパイプラインの詳細に個別のアプリとして表示されないことに注意してください。
手順 2: CI アプリの必要なアドオンがプロビジョニングされる
- 「Provisioning add-ons」(アドオンのプロビジョニング) に示すように、アプリに必要なアドオンは、そのアプリの
app.json
ファイルで指定します。
手順 3: 該当する buildpack が呼び出される
- アプリに対して
app.json
ファイルでカスタム buildpack を指定した場合は、これらの buildpack が一覧表示されている順序で呼び出されます。 - カスタム buildpack を指定しない場合は、Heroku CI がそのアプリに対して、正式にサポートされているどの buildpack を呼び出すかを自動的に決定します。
- 特定の buildpack に
bin/test-compile
スクリプトが含まれている場合は、Heroku CI がそれを実行します。それ以外の場合は、Heroku CI がbin/compile
を実行します。 - いずれかの buildpack が 0 以外の終了コードで終了した場合、テスト実行にはエラーのフラグが付けられます。
手順 4: test-setup
コマンドが実行される
- アプリの
app.json
ファイルで (「Specifying custom test commands)」(カスタムテストコマンドの指定) で示されているように)scripts/test-setup
スクリプトを指定している場合は、Heroku CI が$HOME
ディレクトリからそれを実行します。 test-setup
スクリプトが 0 以外の終了コードで終了した場合、テスト実行にはエラーのフラグが付けられます。test-setup
スクリプトが正常に完了した場合は、設定成果物がキャッシュされ、次の実行に再利用されます。
手順 5: テスト実行が実行される
- アプリの
app.json
ファイルで (「Specifying custom test commands)」(カスタムテストコマンドの指定) で示されているように)scripts/test
スクリプトを指定している場合、それは$HOME
ディレクトリで実行されます。 scripts/test
スクリプトを指定しない場合は、Heroku CI が代わりに、関連付けられた各 buildpack のbin/test
スクリプトを実行します。- 実行されたいずれかのスクリプトが 0 以外のステータスで終了した場合、テスト実行には失敗のフラグが付けられます。
- すべてのテストスクリプトが 0 ステータスで終了した場合、テスト実行には成功のフラグが付けられます。
- 実行されたテストスクリプトが TAP 形式の出力を STDOUT に送出した場合は、個々の成功と失敗がカウントされ、テスト実行の UI に表示されます。
- 実行されたテストスクリプトが TAP 形式の出力を STDOUT に送出した場合は、テストの失敗がテスト実行のステータスの終了コードより優先されます。
手順 6: テスト実行の結果が報告される
- アプリの buildpack は、コンパイル、
test-setup
スクリプト、およびテスト実行自体から出力をストリーミングします。この出力は、パイプラインの [Heroku Dashboard] ページのTests
(テスト) タブに表示されます。 - buildpack またはテストスクリプトで TAP 形式がサポートされていない場合は、テスト実行全体の結果が赤色 (失敗) または緑色 (成功) のどちらかで表示されます。
- すべてのテスト実行の結果が Heroku Dashboard の永続的な URL に保存されます。
手順 7: クリーンアップ
- 1 時間経ってもまだ実行されているテスト実行は自動的に終了されます。
- CI アプリは、関連付けられたすべてのアドオンと共にプロビジョニング解除および削除されます。