Glosarium Protokol Peristiwa Build

Laporkan masalah Lihat sumber Per Malam · 7,2 · 7,1 · 7,0 · 6,5 · 6,4

Setiap jenis peristiwa BEP memiliki semantiknya sendiri, didokumentasikan secara minimal dalam build_event_stream.proto. Glosarium berikut menjelaskan setiap jenis peristiwa.

Dibatalkan

Tidak seperti peristiwa lainnya, Aborted tidak memiliki jenis ID yang sesuai, karena peristiwa Aborted menggantikan peristiwa jenis lainnya. Peristiwa ini mengindikasikan bahwa build dihentikan lebih awal dan ID peristiwa yang muncul di dalamnya tidak dibuat seperti biasanya. Aborted berisi enum dan deskripsi yang mudah dipahami manusia untuk menjelaskannya mengapa build tidak selesai.

Misalnya, jika build mengevaluasi target saat pengguna menyela Bazel, BEP berisi peristiwa seperti berikut:

{
  "id": {
    "targetCompleted": {
      "label": "//:foo",
      "configuration": {
        "id": "544e39a7f0abdb3efdd29d675a48bc6a"
      }
    }
  },
  "aborted": {
    "reason": "USER_INTERRUPTED"
  }
}

ActionExecuted

Memberikan detail tentang eksekusi Action dalam build. Secara default, acara ini disertakan dalam BEP hanya untuk tindakan yang gagal, untuk mendukung identifikasi akar masalah kegagalan build. Pengguna dapat menetapkan tanda --build_event_publish_all_actions untuk menyertakan semua peristiwa ActionExecuted.

BuildFinished

Satu peristiwa BuildFinished dikirim setelah perintah selesai dan menyertakan {i>exit code<i} untuk perintah itu. Peristiwa ini memberikan informasi keberhasilan/kegagalan.

BuildMetadata

Berisi konten yang diuraikan dari tanda --build_metadata. Acara ini ada untuk mendukung integrasi Bazel dengan peralatan lain melalui pemipaan data eksternal (seperti tertentu).

BuildMetrics

Satu peristiwa BuildMetrics dikirim di akhir setiap perintah dan mencakup penghitung/pengukur yang berguna untuk mengukur perilaku alat build selama perintah. Metrik ini menunjukkan pekerjaan yang benar-benar telah dilakukan dan tidak dihitung di-cache pekerjaan yang digunakan kembali.

Perhatikan bahwa memory_metrics mungkin tidak diisi jika tidak ada sampah Java selama eksekusi perintah. Pengguna dapat menyetel atribut Opsi --memory_profile=/dev/null yang memaksa sampah kolektor untuk dijalankan di akhir perintah untuk mengisi memory_metrics.

{
  "id": {
    "buildMetrics": {}
  },
  "buildMetrics": {
    "actionSummary": {
      "actionsExecuted": "1"
    },
    "memoryMetrics": {},
    "targetMetrics": {
      "targetsLoaded": "9",
      "targetsConfigured": "19"
    },
    "packageMetrics": {
      "packagesLoaded": "5"
    },
    "timingMetrics": {
      "cpuTimeInMs": "1590",
      "wallTimeInMs": "359"
    }
  }
}

BuildStarted

Peristiwa pertama dalam aliran data BEP, BuildStarted menyertakan metadata yang menjelaskan sebelum pekerjaan yang berarti dimulai.

BuildToolLogs

Satu peristiwa BuildToolLogs dikirim di akhir perintah, termasuk URI file yang dihasilkan oleh alat build yang dapat membantu pemahaman atau proses debug perilaku alat build. Beberapa informasi mungkin disertakan secara inline.

{
  "id": {
    "buildToolLogs": {}
  },
  "lastMessage": true,
  "buildToolLogs": {
    "log": [
      {
        "name": "elapsed time",
        "contents": "MC4xMjEwMDA="
      },
      {
        "name": "process stats",
        "contents": "MSBwcm9jZXNzOiAxIGludGVybmFsLg=="
      },
      {
        "name": "command.profile.gz",
        "uri": "file:///tmp/.cache/bazel/_bazel_foo/cde87985ad0bfef34eacae575224b8d1/command.profile.gz"
      }
    ]
  }
}

CommandLine

BEP berisi beberapa peristiwa CommandLine yang berisi representasi semua argumen command line (termasuk opsi dan argumen yang tidak ditafsirkan). Setiap peristiwa CommandLine memiliki label di StructuredCommandLineId yang menunjukkan representasi mana yang ingin disampaikan; tiga peristiwa semacam itu muncul di BEP:

  • "original": Command line yang direkonstruksi saat Bazel menerimanya dari Bazel klien, tanpa opsi startup yang bersumber dari file .rc.
  • "canonical": Command line yang efektif dengan file .rc yang diperluas dan kebijakan pemanggilan diterapkan.
  • "tool": Diisi dari opsi --experimental_tool_command_line. Ini berguna untuk menyampaikan baris perintah alat yang membungkus Bazel melalui BEP. Ini dapat berupa pesan buffering protokol biner CommandLine yang dienkode base64 yang digunakan secara langsung, atau string yang diuraikan tetapi tidak ditafsirkan (seperti opsi alat mungkin berbeda dari Bazel).

Konfigurasi

Peristiwa Configuration dikirim untuk setiap configuration yang digunakan pada target level atas dalam build. Setidaknya satu peristiwa konfigurasi selalu hadir. id digunakan kembali oleh TargetConfigured dan TargetComplete ID peristiwa dan diperlukan untuk membedakan peristiwa tersebut build multi-konfigurasi.

{
  "id": {
    "configuration": {
      "id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
    }
  },
  "configuration": {
    "mnemonic": "k8-fastbuild",
    "platformName": "k8",
    "cpu": "k8",
    "makeVariable": {
      "COMPILATION_MODE": "fastbuild",
      "TARGET_CPU": "k8",
      "GENDIR": "bazel-out/k8-fastbuild/bin",
      "BINDIR": "bazel-out/k8-fastbuild/bin"
    }
  }
}

ConvenienceSymlinksIdentified

Eksperimental. Jika --experimental_convenience_symlinks_bep_event ditetapkan, satu peristiwa ConvenienceSymlinksIdentified dihasilkan oleh Perintah build untuk menunjukkan cara mengelola symlink di ruang kerja. Ini memungkinkan alat pembuatan yang memanggil Bazel dari jarak jauh kemudian mengatur {i>workspace<i} seolah-olah Bazel telah dijalankan secara lokal.

{
  "id": {
    "convenienceSymlinksIdentified":{}
  },
  "convenienceSymlinksIdentified": {
    "convenienceSymlinks": [
      {
        "path": "bazel-bin",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out/k8-fastbuild/bin"
      },
      {
        "path": "bazel-genfiles",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out/k8-fastbuild/genfiles"
      },
      {
        "path": "bazel-out",
        "action": "CREATE",
        "target": "execroot/google3/bazel-out"
      }
    ]
  }
}

Ambil

Menunjukkan bahwa operasi Ambil terjadi sebagai bagian dari eksekusi perintah. Tidak seperti peristiwa lain, jika hasil pengambilan yang di-cache digunakan kembali, peristiwa ini tidak muncul di aliran BEP.

NamedSetOfFiles

Peristiwa NamedSetOfFiles melaporkan struktur yang cocok dengan depset file yang dihasilkan selama evaluasi perintah. Depset yang disertakan secara transitif diidentifikasi oleh NamedSetOfFilesId.

Untuk informasi selengkapnya tentang cara menafsirkan peristiwa NamedSetOfFiles streaming, lihat Halaman contoh BEP.

OptionsParsed

Satu peristiwa OptionsParsed mencantumkan semua opsi yang diterapkan pada perintah tersebut, memisahkan opsi {i>startup<i} dari opsi perintah. Laporan ini juga mencakup InvocationPolicy, jika ada.

{
  "id": {
    "optionsParsed": {}
  },
  "optionsParsed": {
    "startupOptions": [
      "--max_idle_secs=10800",
      "--noshutdown_on_low_sys_mem",
      "--connect_timeout_secs=30",
      "--output_user_root=/tmp/.cache/bazel/_bazel_foo",
      "--output_base=/tmp/.cache/bazel/_bazel_foo/a61fd0fbee3f9d6c1e30d54b68655d35",
      "--deep_execroot",
      "--expand_configs_in_place",
      "--idle_server_tasks",
      "--write_command_log",
      "--nowatchfs",
      "--nofatal_event_bus_exceptions",
      "--nowindows_enable_symlinks",
      "--noclient_debug",
    ],
    "cmdLine": [
      "--enable_platform_specific_config",
      "--build_event_json_file=/tmp/bep.json"
    ],
    "explicitCmdLine": [
      "--build_event_json_file=/tmp/bep.json"
    ],
    "invocationPolicy": {}
  }
}

PatternExpanded

Peristiwa PatternExpanded menunjukkan kumpulan semua target yang cocok dengan pola yang diberikan pada command line. Agar perintah berhasil, terdapat satu peristiwa dengan semua pola di PatternExpandedId dan semua target di turunan peristiwa PatternExpanded. Jika pola diperluas ke salah satu test_suite adalah kumpulan target pengujian yang disertakan oleh test_suite. Untuk setiap pola yang gagal di-resolve, BEP berisi Aborted tambahan dengan PatternExpandedId yang mengidentifikasi polanya.

{
  "id": {
    "pattern": {
      "pattern":["//base:all"]
    }
  },
  "children": [
    {"targetConfigured":{"label":"//base:foo"}},
    {"targetConfigured":{"label":"//base:foobar"}}
  ],
  "expanded": {
    "testSuiteExpansions": {
      "suiteLabel": "//base:suite",
      "testLabels": "//base:foo_test"
    }
  }
}

Progres

Peristiwa kemajuan berisi {i>output<i} standar dan {i>standard error<i} yang dihasilkan oleh Bazel selama menjalankan perintah. Peristiwa ini juga dibuat secara otomatis sesuai kebutuhan untuk mengumumkan peristiwa yang belum diumumkan oleh "induk" yang logis peristiwa (di khususnya, NamedSetOfFiles.)

TargetComplete

Untuk setiap kombinasi (target, configuration, aspect) yang menyelesaikan fase eksekusi, peristiwa TargetComplete akan disertakan dalam BEP. Acara ini berisi keberhasilan/kegagalan target dan grup output yang diminta target.

{
  "id": {
    "targetCompleted": {
      "label": "//examples/py:bep",
      "configuration": {
        "id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
      }
    }
  },
  "completed": {
    "success": true,
    "outputGroup": [
      {
        "name": "default",
        "fileSets": [
          {
            "id": "0"
          }
        ]
      }
    ]
  }
}

TargetConfigured

Untuk setiap Target yang menyelesaikan fase analisis, peristiwa TargetConfigured dikeluarkan termasuk dalam BEP. Ini adalah sumber resmi untuk "jenis aturan" target . Konfigurasi yang diterapkan ke target muncul dalam turunan peristiwa.

Misalnya, membangun aplikasi dengan opsi --experimental_multi_cpu dapat menghasilkan peristiwa TargetConfigured berikut untuk satu target dengan dua konfigurasi:

{
  "id": {
    "targetConfigured": {
      "label": "//starlark_configurations/multi_arch_binary:foo"
    }
  },
  "children": [
    {
      "targetCompleted": {
        "label": "//starlark_configurations/multi_arch_binary:foo",
        "configuration": {
          "id": "c62b30c8ab7b9fc51a05848af9276529842a11a7655c71327ade26d7c894c818"
        }
      }
    },
    {
      "targetCompleted": {
        "label": "//starlark_configurations/multi_arch_binary:foo",
        "configuration": {
          "id": "eae0379b65abce68d54e0924c0ebcbf3d3df26c6e84ef7b2be51e8dc5b513c99"
        }
      }
    }
  ],
  "configured": {
    "targetKind": "foo_binary rule"
  }
}

TargetSummary

Untuk setiap pasangan (target, configuration) yang dieksekusi, TargetSummary peristiwa akan disertakan dengan hasil keberhasilan agregat yang mencakup konfigurasi target eksekusi dan semua aspek yang diterapkan pada target yang telah dikonfigurasi tersebut.

TestResult

Jika pengujian diminta, peristiwa TestResult akan dikirim untuk setiap percobaan pengujian, sharding, dan berjalan per pengujian. Hal ini memungkinkan konsumen BEP untuk mengidentifikasi dengan tepat tindakan pengujian gagal dalam pengujiannya dan mengidentifikasi {i>output<i} pengujian (seperti log, file test.xml) untuk setiap tindakan pengujian.

TestSummary

Jika pengujian diminta, peristiwa TestSummary akan dikirim untuk setiap (target, configuration) pengujian, yang berisi informasi yang diperlukan untuk menafsirkan pengujian hasil pengujian tersebut. Jumlah percobaan, shard, dan operasi per pengujian disertakan untuk mengaktifkan Konsumen BEP untuk membedakan artefak di seluruh dimensi ini. Jumlah percobaan dan operasi per pengujian dipertimbangkan saat menghasilkan TestStatus agregat untuk membedakan pengujian FLAKY dari pengujian FAILED.

UnstructuredCommandLine

Tidak seperti CommandLine, peristiwa ini menjalankan command line yang tidak diurai flag dalam bentuk string seperti yang ditemukan oleh alat build setelah meluaskan semua File .bazelrc dan mempertimbangkan flag --config.

Peristiwa UnstructuredCommandLine dapat diandalkan untuk mereproduksi suatu peristiwa secara tepat menjalankan perintah tertentu.

WorkspaceConfig

Satu peristiwa WorkspaceConfig berisi informasi konfigurasi terkait ruang kerja Anda, seperti root eksekusi.

WorkspaceStatus

Satu peristiwa WorkspaceStatus berisi hasil dari status ruang kerja baris perintah.