スクリプトから Bazel を呼び出す

<ph type="x-smartling-placeholder"></ph> 問題を報告する ソースを表示 夜間 · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

スクリプトから Bazel を呼び出して、ビルド、テスト、クエリを行うことができます 依存関係グラフを作成します。Bazel は効果的なスクリプティングを可能にするように設計されていますが、 このセクションでは、スクリプトを改善するにあたって注意すべき点を 構築できます

出力ベースの選択

--output_base オプションは、Bazel プロセスが書き込む場所を制御します。 および内部で使用されるさまざまな作業ファイルが含まれます。 Bazel は、VM の同時ミューテーションを防ぐためのロックです。 複数の Bazel プロセスによる出力ベース。

スクリプトの正しい出力ベース ディレクトリの選択は、 判断できますビルド出力を特定の場所に配置する必要がある場合は、 使用する出力ベースを指定します。「読み取り専用」にする場合発信: Bazel(bazel query など)の場合、ロック ファクタがより重要になります。イン 特に、スクリプトの複数のインスタンスを同時に実行する必要がある場合は、 それぞれに異なる(またはランダムな)出力ベースを指定する必要があります。

デフォルトの出力ベース値を使用すると、同じ値で対立することになります。 ユーザーが使用したインタラクティブな Bazel コマンドで使用されたロックの数。お客様に以下の問題がある場合 実行する場合、スクリプトはそれらのコマンドを コマンドを完了する必要があります。

サーバーモードに関する注意事項

デフォルトでは、Bazel は実行時間の長いサーバー プロセスを 役立ちますスクリプトで Bazel を実行する場合は、必ず shutdown を呼び出します。 サーバーの終了時に、または --max_idle_secs=5 を指定して、 アイドル状態のサーバーは直ちにシャットダウンします。

どのような終了コードが返されますか?

Bazel は、ソースコードが原因で発生する障害の Bazel の正常な実行を妨げる外部エラーから保護します。 Bazel の実行で、次の終了コードが発生する可能性があります。

すべてのコマンドに共通する終了コード:

  • 0 - 成功
  • 2 - コマンドラインの問題、不正または不正なフラグ、コマンドの組み合わせ 不適切な環境変数。コマンドラインを変更する必要があります。
  • 8 - ビルドは中断されましたが、正常にシャットダウンして終了しました。
  • 9 - サーバーロックが保持され、--noblock_for_lock が渡されました。
  • 32 - 外部環境エラーは、このマシンにはありません。

  • 33 - Bazel がメモリ不足でクラッシュしました。コマンドラインを変更する必要があります。

  • 34 - Google の内部で使用するために予約されています。

  • 35 - Google の内部で使用するために予約されています。

  • 36 - 地域の環境問題、恒久的なものと考えられます。

  • 37 - 未処理の例外 / Bazel の内部エラー。

  • 38 - Google の内部で使用するために予約されています。

  • 39 - Bazel に必要な blob がリモート キャッシュから削除されます。

  • 41-44 - Google の内部で使用するために予約されています。

  • 45 - ビルドイベント サービスへの結果の公開中にエラーが発生しました。

  • 47 - Google の内部で使用するために予約されています。

コマンド bazel buildbazel test の戻りコード:

  • 1 - ビルドに失敗しました。
  • 3 - ビルドは正常ですが、一部のテストが失敗したか、タイムアウトしました。
  • 4 - ビルドは成功したが、テストが見つからなかった 渡されます。

bazel run の場合:

  • 1 - ビルドに失敗しました。
  • ビルドが成功しても、実行されたサブプロセスがゼロ以外の終了を返す場合 コマンドの終了コードにもなります。

bazel query の場合:

  • 3 - 部分的に成功しましたが、クエリで 1 つ以上のエラーが発生しました。 入力 BUILD ファイル セットが設定されているため、オペレーションの結果が 100% にならない 実現できますこれは、コマンドラインの --keep_going オプションが原因であると考えられます。
  • 7 - コマンドが失敗しました。

今後の Bazel バージョンで、一般的なエラーの代わりとして終了コードが追加される可能性があります 終了コード 1 を、特定の意味を持つ別のゼロ以外の値に置き換えます。 ただし、ゼロ以外の終了値はすべてエラーになります。

.bazelrc ファイルの読み取り

デフォルトでは、Bazel はベースから .bazelrc ファイルを読み取ります。 ユーザーのホーム ディレクトリに移動できます。次の内容に該当するかどうか 「desird」はスクリプトの選択肢ですスクリプトを完璧にする必要がある場合に、 密閉型の(リリースビルドを実行するときなど)は、 .bazelrc ファイル。--bazelrc=/dev/null オプションを使用します。モニタリングと ビルドする場合は、デフォルトの動作が適切です。

コマンドログ

Bazel の出力は、コマンドログ ファイル( 次のコマンドを実行します。

bazel info command_log

コマンド ログ ファイルには、インターリーブされたコマンドの stdout ストリームと stderr ストリームが 実行することもできます。bazel info を実行すると、 最新の Bazel コマンドとなるため、このファイルの内容をそのまま引き継ぐことができます。 ただし、コマンドログ ファイルの場所は、変更しない限り変更されません。 --output_base オプションまたは --output_user_root オプションの設定。

出力の解析

Bazel の出力は、さまざまな目的で非常に簡単に解析できます。2 つのオプションから 進行状況を抑制する --noshow_progress がスクリプトに役立ちます。 、--show_result n は、メッセージの受信の有無を 「最新ビルド」ではなくメッセージが出力されます。これらのメッセージは ビルドに成功したターゲットと出力の場所が検出されます。 作成しました。モデルを使用する場合は、n に非常に大きな値を指定するようにしてください。 表示されます。

プロファイリングによるパフォーマンスのトラブルシューティング

パフォーマンス プロファイリング セクションをご覧ください。