Glosarium Protokol Peristiwa Build

7/0.9/2.5. Lihat sumber Nightly {/3/}

Setiap jenis peristiwa BEP memiliki semantik sendiri, didokumentasikan secara minimal di 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 dari jenis lainnya. Peristiwa ini menunjukkan bahwa build dihentikan lebih awal dan ID peristiwa yang menampilkannya tidak dihasilkan secara normal. Aborted berisi deskripsi enum dan mudah dibaca untuk menjelaskan mengapa build tidak selesai.

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

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

ActionExecuted

Memberikan detail tentang eksekusi Action tertentu dalam build. Secara default, peristiwa ini disertakan dalam BEP hanya untuk tindakan yang gagal, guna mendukung identifikasi penyebab utama 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 kode keluar untuk perintah tersebut. Peristiwa ini memberikan informasi keberhasilan/kegagalan yang kredibel.

BuildMetadata

Berisi konten yang diuraikan dari tanda --build_metadata. Peristiwa ini dibuat untuk mendukung integrasi Bazel dengan alat lain melalui pengumpulan data eksternal (seperti ID).

BuildMetrics

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

Perhatikan bahwa memory_metrics mungkin tidak diisi jika tidak ada pembersihan sampah memori Java selama eksekusi perintah. Pengguna dapat menetapkan opsi --memory_profile=/dev/null yang memaksa pembersih sampah memori untuk berjalan 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 BEP, BuildStarted menyertakan metadata yang menjelaskan perintah sebelum pekerjaan yang bermakna dimulai.

BuildToolLogs

Satu peristiwa BuildToolLogs dikirim di akhir perintah, termasuk URI file yang dihasilkan oleh alat build yang dapat membantu memahami atau men-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 dari semua argumen command line (termasuk opsi dan argumen yang tidak diinterpretasikan). Setiap peristiwa CommandLine memiliki label di StructuredCommandLineId yang menunjukkan representasi mana yang disampaikan; tiga peristiwa semacam itu muncul di BEP:

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

Configuration

Peristiwa Configuration dikirim untuk setiap configuration yang digunakan di target level teratas dalam build. Setidaknya satu peristiwa konfigurasi selalu ada. id digunakan kembali oleh ID peristiwa TargetConfigured dan TargetComplete dan diperlukan untuk membedakan peristiwa tersebut dalam 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 opsi --experimental_convenience_symlinks_bep_event ditetapkan, satu peristiwa ConvenienceSymlinksIdentified akan dihasilkan oleh perintah build untuk menunjukkan cara symlink di ruang kerja dikelola. Hal ini memungkinkan alat pembuatan yang memanggil Bazel dari jarak jauh, lalu mengatur ruang kerja lokal 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 lainnya, jika hasil pengambilan yang di-cache digunakan kembali, peristiwa ini tidak akan 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 aliran data, lihat halaman contoh BEP.

OptionsParsed

Peristiwa OptionsParsed tunggal mencantumkan semua opsi yang diterapkan pada perintah tersebut, yang memisahkan opsi startup dari opsi perintah. Kebijakan 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 di command line. Agar perintah berhasil, satu peristiwa akan muncul dengan semua pola di PatternExpandedId dan semua target di turunan peristiwa PatternExpanded. Jika pola diperluas ke test_suite mana pun, kumpulan target pengujian yang disertakan oleh test_suite. Untuk setiap pola yang gagal di-resolve, BEP berisi peristiwa Aborted tambahan dengan PatternExpandedId yang mengidentifikasi pola.

{
  "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 progres berisi output standar dan error standar yang dihasilkan oleh Bazel selama eksekusi perintah. Peristiwa ini juga otomatis dibuat sesuai kebutuhan untuk mengumumkan peristiwa yang belum diumumkan oleh peristiwa "induk" yang logis (khususnya, NamedSetOfFiles.)

TargetComplete

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

{
  "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 disertakan dalam BEP. Ini adalah sumber otoritatif untuk atribut "jenis aturan" target. Konfigurasi yang diterapkan ke target akan muncul di turunan peristiwa yang diumumkan.

Misalnya, mem-build 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 dijalankan, peristiwa TargetSummary disertakan dengan hasil keberhasilan gabungan yang mencakup eksekusi target yang dikonfigurasi dan semua aspek yang diterapkan ke target yang dikonfigurasi tersebut.

TestResult

Jika pengujian diminta, peristiwa TestResult akan dikirim untuk setiap upaya pengujian, shard, dan dijalankan per pengujian. Hal ini memungkinkan konsumen BEP mengidentifikasi dengan tepat tindakan pengujian mana yang gagal dalam pengujian dan mengidentifikasi output 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 hasil pengujian. Jumlah percobaan, shard, dan operasi per pengujian disertakan agar konsumen BEP dapat membedakan artefak di seluruh dimensi ini. Upaya dan operasi per pengujian dipertimbangkan saat menghasilkan TestStatus gabungan untuk membedakan pengujian FLAKY dari pengujian FAILED.

UnstructuredCommandLine

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

Peristiwa UnstructuredCommandLine dapat diandalkan untuk mereproduksi eksekusi perintah tertentu secara akurat.

WorkspaceConfig

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

WorkspaceStatus

Satu peristiwa WorkspaceStatus berisi hasil dari perintah status workspace.