هر نوع رویداد BEP معنایی خاص خود را دارد که حداقل در build_event_stream.proto مستند شده است. واژه نامه زیر هر نوع رویداد را توصیف می کند.
سقط شد
برخلاف سایر رویدادها، Aborted
نوع شناسه مربوطه ندارد، زیرا رویداد Aborted
جایگزین رویدادهای انواع دیگر می شود. این رویداد نشان می دهد که ساخت زودتر خاتمه یافته است و شناسه رویدادی که در آن ظاهر می شود به طور معمول تولید نشده است. Aborted
حاوی توضیحاتی برای انسان دوستانه و فهرستی است تا توضیح دهد که چرا ساخت کامل نشده است.
به عنوان مثال، اگر یک بیلد زمانی که کاربر Bazel را قطع می کند، هدفی را ارزیابی می کند، BEP حاوی رویدادی مانند زیر است:
{
"id": {
"targetCompleted": {
"label": "//:foo",
"configuration": {
"id": "544e39a7f0abdb3efdd29d675a48bc6a"
}
}
},
"aborted": {
"reason": "USER_INTERRUPTED"
}
}
ActionExecuted
جزئیات مربوط به اجرای یک Action خاص در یک ساخت را ارائه می دهد. بهطور پیشفرض، این رویداد فقط برای اقدامات ناموفق در BEP گنجانده شده است تا از شناسایی علت اصلی خرابیهای ساخت پشتیبانی کند. کاربران میتوانند پرچم --build_event_publish_all_actions
را طوری تنظیم کنند که همه رویدادهای ActionExecuted
را شامل شود.
ساخت به پایان رسید
یک رویداد BuildFinished
پس از کامل شدن دستور ارسال میشود و شامل کد خروج فرمان است. این رویداد اطلاعات معتبر موفقیت/شکست را ارائه می دهد.
BuildMetadata
حاوی محتوای تجزیه شده پرچم --build_metadata
است. این رویداد برای پشتیبانی از ادغام Bazel با ابزارهای دیگر توسط لوله کشی داده های خارجی (مانند شناسه ها) وجود دارد.
BuildMetrics
یک رویداد BuildMetrics
در انتهای هر فرمان ارسال میشود و شامل شمارندهها/سنجهایی است که برای کمی کردن رفتار ابزار ساخت در طول فرمان مفید هستند. این معیارها کار واقعی انجام شده را نشان میدهند و کارهای ذخیرهشدهای را که مجدداً استفاده میشوند، حساب نمیکنند.
توجه داشته باشید که اگر در طول اجرای دستور جمع آوری زباله جاوا وجود نداشته باشد، memory_metrics
ممکن است پر نشود. کاربران ممکن است گزینه --memory_profile=/dev/null
را تنظیم کنند که جمعآورنده زباله را مجبور میکند در انتهای فرمان اجرا شود تا memory_metrics
را پر کند.
{
"id": {
"buildMetrics": {}
},
"buildMetrics": {
"actionSummary": {
"actionsExecuted": "1"
},
"memoryMetrics": {},
"targetMetrics": {
"targetsLoaded": "9",
"targetsConfigured": "19"
},
"packageMetrics": {
"packagesLoaded": "5"
},
"timingMetrics": {
"cpuTimeInMs": "1590",
"wallTimeInMs": "359"
}
}
}
ساخت شروع شد
اولین رویداد در جریان BEP، BuildStarted
شامل ابردادههایی است که دستور را قبل از شروع هر کار معنیداری توصیف میکنند.
BuildToolLogs
یک رویداد BuildToolLogs
در انتهای یک فرمان ارسال میشود، شامل URI فایلهای تولید شده توسط ابزار ساخت که ممکن است به درک یا اشکالزدایی رفتار ابزار ساخت کمک کند. برخی از اطلاعات ممکن است به صورت درون خطی گنجانده شود.
{
"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"
}
]
}
}
خط فرمان
BEP شامل چندین رویداد CommandLine
است که حاوی نمایشهایی از همه آرگومانهای خط فرمان (از جمله گزینهها و آرگومانهای تفسیر نشده) است. هر رویداد CommandLine
دارای یک برچسب در StructuredCommandLineId
خود است که نشان می دهد کدام نمایش را منتقل می کند. سه رویداد از این قبیل در BEP ظاهر می شود:
-
"original"
: خط فرمان بازسازی شده همانطور که Bazel آن را از مشتری Bazel دریافت کرد، بدون گزینه های راه اندازی که از فایل های .rc منبع می شوند. -
"canonical"
: خط فرمان موثر با فایل های .rc گسترش یافته و خط مشی فراخوانی اعمال می شود. -
"tool"
: از گزینه--experimental_tool_command_line
است. این برای انتقال خط فرمان ابزار بسته بندی Bazel از طریق BEP مفید است. این می تواند یک پیام بافر پروتکل باینریCommandLine
کدگذاری شده با base64 باشد که مستقیماً استفاده می شود، یا رشته ای که تجزیه می شود اما تفسیر نمی شود (زیرا گزینه های ابزار ممکن است با گزینه های Bazel متفاوت باشد).
پیکربندی
یک رویداد Configuration
برای هر configuration
استفاده شده در اهداف سطح بالا در یک ساخت ارسال می شود. حداقل یک رویداد پیکربندی همیشه وجود دارد. id
توسط شناسههای رویداد TargetConfigured
و TargetComplete
دوباره استفاده میشود و برای رفع ابهام آن رویدادها در ساختهای چند پیکربندی ضروری است.
{
"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
تجربی. اگر گزینه --experimental_convenience_symlinks_bep_event
تنظیم شده باشد، یک رویداد منفرد ConvenienceSymlinksIdentified
توسط دستورات build
تولید می شود تا نشان دهد که چگونه پیوندهای نماد در فضای کاری باید مدیریت شوند. این امکان ساخت ابزارهایی را فراهم می کند که Bazel را از راه دور فراخوانی می کنند و سپس فضای کاری محلی را طوری تنظیم می کنند که گویی Bazel به صورت محلی اجرا شده است.
{
"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"
}
]
}
}
رفتن و آوردن
نشان می دهد که عملیات Fetch به عنوان بخشی از اجرای دستور رخ داده است. برخلاف سایر رویدادها، اگر یک نتیجه واکشی کش شده مجدداً استفاده شود، این رویداد در جریان BEP ظاهر نمی شود.
NamedSetOfFiles
رویدادهای NamedSetOfFiles
را گزارش میکنند که با یک depset
فایلهای تولید شده در طول ارزیابی فرمان مطابقت دارد. Depset های انتقالی با NamedSetOfFilesId
شناسایی می شوند.
برای اطلاعات بیشتر در مورد تفسیر رویدادهای NamedSetOfFiles
یک جریان، به صفحه مثال های BEP مراجعه کنید.
OptionsParsed
یک رویداد OptionsParsed
تمام گزینههای اعمال شده روی فرمان را فهرست میکند و گزینههای راهاندازی را از گزینههای فرمان جدا میکند. همچنین در صورت وجود، InvocationPolicy را نیز شامل میشود.
{
"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": {}
}
}
Pattern Expanded
رویدادهای PatternExpanded
مجموعه ای از تمام اهداف را نشان می دهد که با الگوهای ارائه شده در خط فرمان مطابقت دارند. برای دستورات موفق، یک رویداد واحد با همه الگوها در PatternExpandedId
و همه اهداف در فرزندان رویداد PatternExpanded
وجود دارد. اگر الگو به هر test_suite
گسترش یابد، مجموعه ای از اهداف آزمایشی شامل test_suite
است. برای هر الگوی که حل نمی شود، BEP حاوی یک رویداد Aborted
اضافی با PatternExpandedId
است که الگو را شناسایی می کند.
{
"id": {
"pattern": {
"pattern":["//base:all"]
}
},
"children": [
{"targetConfigured":{"label":"//base:foo"}},
{"targetConfigured":{"label":"//base:foobar"}}
],
"expanded": {
"testSuiteExpansions": {
"suiteLabel": "//base:suite",
"testLabels": "//base:foo_test"
}
}
}
پیش رفتن
رویدادهای پیشرفت شامل خروجی استاندارد و خطای استاندارد تولید شده توسط Bazel در هنگام اجرای فرمان است. این رویدادها همچنین برای اعلام رویدادهایی که توسط یک رویداد منطقی "والد" (به ویژه NamedSetOfFiles ) اعلام نشده اند، به طور خودکار تولید می شوند.
TargetComplete
برای هر ترکیب (target, configuration, aspect)
که مرحله اجرا را کامل می کند، یک رویداد TargetComplete
در BEP گنجانده شده است. رویداد شامل موفقیت/شکست هدف و گروه های خروجی درخواستی هدف است.
{
"id": {
"targetCompleted": {
"label": "//examples/py:bep",
"configuration": {
"id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
}
}
},
"completed": {
"success": true,
"outputGroup": [
{
"name": "default",
"fileSets": [
{
"id": "0"
}
]
}
]
}
}
TargetConfigured
برای هر هدفی که مرحله تحلیل را کامل می کند، یک رویداد TargetConfigured
در BEP گنجانده شده است. این منبع معتبر برای ویژگی "نوع قانون" هدف است. پیکربندی(های) اعمال شده روی هدف در فرزندان اعلام شده رویداد ظاهر می شود.
برای مثال، ساختن با گزینههای --experimental_multi_cpu
ممکن است رویداد TargetConfigured
زیر را برای یک هدف با دو پیکربندی ایجاد کند:
{
"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"
}
}
خلاصه هدف
برای هر جفت (target, configuration)
که اجرا میشود، یک رویداد TargetSummary
با یک نتیجه موفقیت انبوه شامل اجرای هدف پیکربندیشده و تمام جنبههای اعمال شده برای آن هدف پیکربندیشده گنجانده میشود.
نتیجه آزمایش
در صورت درخواست آزمایش، یک رویداد TestResult
برای هر آزمایش، قطعه قطعه و اجرای هر آزمون ارسال میشود. این به مصرفکنندگان BEP اجازه میدهد تا دقیقاً تشخیص دهند که کدام اقدامات آزمایشی در آزمایشهایشان شکست خورده و خروجیهای آزمایشی (مانند گزارشها، فایلهای test.xml) را برای هر اقدام آزمایشی شناسایی کنند.
خلاصه تست
در صورت درخواست آزمایش، یک رویداد TestSummary
برای هر آزمون (target, configuration)
ارسال میشود که حاوی اطلاعات لازم برای تفسیر نتایج آزمون است. تعداد تلاشها، تکهها و اجراها در هر آزمون گنجانده شده است تا مصرفکنندگان BEP بتوانند مصنوعات را در این ابعاد متمایز کنند. تلاشها و اجراها در هر آزمون هنگام تولید مجموع TestStatus
در نظر گرفته میشوند تا تستهای FLAKY
از آزمونهای FAILED
متمایز شوند.
Unstructured CommandLine
برخلاف CommandLine ، این رویداد پرچمهای خط فرمان تجزیهنشده را به شکل رشتهای حمل میکند، همانطور که ابزار ساخت پس از گسترش همه فایلهای .bazelrc
. و در نظر گرفتن پرچم --config
با آن مواجه میشود.
رویداد UnstructuredCommandLine
ممکن است برای بازتولید دقیق اجرای دستور معین مورد اتکا قرار گیرد.
WorkspaceConfig
یک رویداد WorkspaceConfig
حاوی اطلاعات پیکربندی مربوط به فضای کاری، مانند ریشه اجرا است.
وضعیت فضای کاری
یک رویداد WorkspaceStatus
منفرد حاوی نتیجه فرمان وضعیت فضای کاری است .