Glosarium Protokol Peristiwa Build

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.
Laporkan masalah Lihat sumber

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

Dibatalkan

Tidak seperti peristiwa lain, 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 memunculkannya tidak dihasilkan secara normal. Aborted berisi enum dan deskripsi yang mudah dibaca untuk menjelaskan mengapa build tidak selesai.

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

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

Dijalankan

Menyediakan detail tentang eksekusi Tindakan tertentu dalam build. Secara default, peristiwa ini disertakan dalam BEP hanya untuk tindakan yang gagal, untuk mendukung mengidentifikasi penyebab utama kegagalan build. Pengguna dapat menetapkan flag --build_event_publish_all_actions untuk menyertakan semua peristiwa ActionExecuted.

BuildSelesai

Satu peristiwa BuildFinished dikirim setelah perintah selesai dan menyertakan kode keluar untuk perintah tersebut. Peristiwa ini memberikan informasi keberhasilan/kegagalan yang kredibel.

Membuat Metadata

Berisi konten yang ditandai dari flag --build_metadata. Peristiwa ini ada untuk mendukung integrasi Bazel dengan alat lainnya dengan menambahkan data eksternal (seperti ID).

BuildMetrik

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 sebenarnya 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 agar 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"
    }
  }
}

Pembuatan Dimulai

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 dalam memahami atau men-debug perilaku alat build. Beberapa informasi mungkin disertakan 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"
      }
    ]
  }
}

Baris Perintah

BEP berisi beberapa peristiwa CommandLine yang berisi representasi semua argumen command line (termasuk opsi dan argumen yang tidak ditafsirkan). Setiap peristiwa CommandLine memiliki label dalam StructuredCommandLineId-nya yang menunjukkan representasi yang disampaikan; tiga peristiwa tersebut akan muncul dalam BEP:

  • "original": Commandline yang direkonstruksi saat Bazel menerimanya dari klien Bazel, tanpa opsi startup yang bersumber dari file .rc.
  • "canonical": Commandline yang efektif dengan file .rc 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. Hal ini dapat berupa pesan pertukaran protokol biner CommandLine berenkode base64 yang digunakan secara langsung, atau string yang diurai tetapi tidak ditafsirkan (karena opsi alat mungkin berbeda dari Bazel).

Konfigurasi

Peristiwa Configuration dikirim untuk setiap configuration yang digunakan dalam target level teratas dalam build. Setidaknya satu peristiwa konfigurasi selalu ada. id digunakan ulang oleh ID peristiwa TargetConfigured dan TargetComplete serta 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"
    }
  }
}

KenyamananSymlinksIdentified

Eksperimental. Jika opsi --experimental_convenience_symlinks_bep_event ditetapkan, satu peristiwa ConvenienceSymlinksIdentified akan dihasilkan oleh perintah build untuk menunjukkan cara pengelolaan symlink di ruang kerja. Hal ini memungkinkan pembuatan alat 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 Pengambilan terjadi sebagai bagian dari eksekusi perintah. Tidak seperti peristiwa lain, jika hasil pengambilan yang di-cache digunakan kembali, peristiwa ini tidak muncul dalam aliran BEP.

NamaFile SetOfFile

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, lihat halaman contoh BEP.

OpsiParse

Satu peristiwa OptionsParsed mencantumkan semua opsi yang diterapkan ke perintah, yang memisahkan opsi startup dari opsi perintah. 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": {}
  }
}

PolaDiperluas

Peristiwa PatternExpanded menunjukkan kumpulan semua target yang cocok dengan pola yang disediakan pada command line. Untuk perintah yang berhasil, satu peristiwa ada dengan semua pola di PatternExpandedId dan semua target di turunan peristiwa PatternExpanded. Jika pola diperluas ke test_suite kumpulan target pengujian yang disertakan oleh test_suite. Untuk setiap pola yang gagal diselesaikan, 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 Bazel selama eksekusi perintah. Peristiwa ini juga dihasilkan secara otomatis sesuai kebutuhan untuk mengumumkan peristiwa yang belum diumumkan oleh peristiwa "induk" logis (khususnya, NamedSetOfFiles.)

TargetSelesai

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

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

TargetDikonfigurasi

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

Misalnya, mem-build 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"
  }
}

RingkasanTarget

Untuk setiap pasangan (target, configuration) yang dieksekusi, peristiwa TargetSummary disertakan dengan hasil sukses 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 percobaan pengujian, melakukan sharding, dan menjalankannya per pengujian. Dengan begitu, konsumen BEP dapat mengidentifikasi dengan tepat tindakan pengujian mana yang gagal dalam pengujian dan mengidentifikasi output pengujian (seperti log, file test.xml) untuk setiap tindakan pengujian.

RingkasanPengujian

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 pengujian per pengujian disertakan untuk memungkinkan konsumen BeP membedakan artefak di seluruh dimensi ini. Percobaan dan pengoperasian per pengujian dipertimbangkan saat membuat TestStatus gabungan untuk membedakan pengujian FLAKY dari pengujian FAILED.

Baris TidakTerstruktur

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

Peristiwa UnstructuredCommandLine dapat diandalkan untuk mereproduksi dengan tepat eksekusi perintah tertentu.

WorkspaceConfig

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

StatusRuang Kerja

Satu peristiwa WorkspaceStatus berisi hasil perintah status ruang kerja.