לכל סוג של אירוע BEP יש סמנטיקה משלהם, המתועדת באופן מינימלי ב-build_event_stream.proto. מילון המונחים הבא מתאר כל סוג אירוע.
הפעולה בוטלה
בניגוד לאירועים אחרים, ל-Aborted
אין סוג מזהה תואם, כי אירוע Aborted
מחליף אירועים מסוגים אחרים. האירוע הזה מצביע על כך שה-build הסתיים מוקדם יותר ומזהה האירוע שהוא מופיע בו לא נוצר באופן רגיל. Aborted
מכיל תיאור 'אנום' וידידותי לבני אדם
שמסביר את הסיבה להשלמת ה-build.
לדוגמה, אם ה-build מעריך יעד כאשר המשתמש מפריע ל-Bazel, BEP מכיל אירוע כמו:
{
"id": {
"targetCompleted": {
"label": "//:foo",
"configuration": {
"id": "544e39a7f0abdb3efdd29d675a48bc6a"
}
}
},
"aborted": {
"reason": "USER_INTERRUPTED"
}
}
פעולה שבוצעה
כולל פרטים על הביצוע של פעולה ספציפית ב-build. כברירת מחדל, האירוע הזה נכלל ב-BEP רק עבור פעולות שנכשלו, כדי לזהות את הגורם העיקרי לכשלים ב-build. המשתמשים יכולים להגדיר את הסימון --build_event_publish_all_actions
כך שיכלול את כל אירועי ActionExecuted
.
גרסת build
אירוע יחיד ב-BuildFinished
נשלח אחרי שהפקודה הושלמה,
וכולל קוד היציאה של הפקודה. האירוע הזה מספק מידע מהימן על הצלחה/נכשל.
מטא-נתונים של Build
מכיל את התוכן המנותח של הדגל --build_metadata
. מטרת האירוע היא לשלב את Bazel בכלים אחרים באמצעות צנרת חיצונית (כמו מזהים).
מדדי Build
אירוע אחד (BuildMetrics
) נשלח בסוף כל פקודה, והוא כולל מונים/מדדים שמועילים לכמת ההתנהגות של כלי ה-build בפקודה. המדדים האלה מציינים שהעבודה בוצעה בפועל ולא נספרת עבודה שמאוחסנת במטמון.
לתשומת ליבך, ייתכן שהקובץ memory_metrics
לא יאוכלס אם לא היה איסוף אשפה ב-Java במהלך ביצוע הפקודה. המשתמשים יכולים להגדיר את האפשרות --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 של קבצים שנוצרו על ידי כלי ה-build, שעשויים לעזור בהבנה או בניפוי באגים בהתנהגות כלי ה-build. ייתכן שחלק מהמידע ייכלל בשורה.
{
"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
64 שנעשה בהן שימוש ישיר, או מחרוזת שמנותח אבל לא מתורגם (כי האפשרויות של הכלי עשויות להיות שונות מ-Bazel's).
הגדרה
אירוע Configuration
נשלח עבור כל configuration
ביעדים ברמה העליונה ב-build. תמיד קיים אירוע הגדרה אחד לפחות. id
משתמש ב-TargetConfigured
וב-TargetComplete
מזהי אירועים כדי לעשות הבחנה בין האירועים ב-build של הגדרות אישיות רבות.
{
"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"
}
}
}
מזהה נוחות
ניסיוני. אם האפשרות --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"
}
]
}
}
שליפה
מציין שפעולת שליפה נעשתה כחלק מביצוע הפקודה. שלא כמו אירועים אחרים, אם משתמשים שוב בתוצאת אחזור ששמורה במטמון, האירוע הזה לא מופיע בזרם BEP.
NamedSetOfFiles
NamedSetOfFiles
אירועים מדווחים על מבנה שתואם ל-depset
מהקבצים שנוצרו במהלך הערכת הפקודה.
פרופסאות שכלולות באופן זמני מזוהות על ידי NamedSetOfFilesId
.
למידע נוסף על פרשנות האירועים של NamedSetOfFiles
בסטרימינג, ניתן לעיין בדף הדוגמאות של BEP.
אפשרויות ניתוח
אירוע OptionsParsed
בודד מפרט את כל האפשרויות שהוחלו על הפקודה, ומפריד את אפשרויות ההפעלה מאפשרויות הפקודה. היא כוללת גם את מדיניות המדיניות, אם יש כזו.
{
"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
אירועים מציינים את הקבוצה של כל היעדים שתואמים לתבניות שסופקו בשורת הפקודה. כדי ליצור פקודות מוצלחות, אירוע יחיד קיים בכל התבניות ב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).
יעד מלא
עבור כל שילוב (target, configuration, aspect)
שמשלים את שלב הביצוע, אירוע TargetComplete
נכלל ב-BEP. האירוע מכיל את הכיתוב 'מטרה/הצלחה' של היעד ואת קבוצות הפלט המבוקשות של היעד.
{
"id": {
"targetCompleted": {
"label": "//examples/py:bep",
"configuration": {
"id": "a5d130b0966b4a9ca2d32725aa5baf40e215bcfc4d5cdcdc60f5cc5b4918903b"
}
}
},
"completed": {
"success": true,
"outputGroup": [
{
"name": "default",
"fileSets": [
{
"id": "0"
}
]
}
]
}
}
יעד מוגדר
עבור כל יעד שמשלים את שלב הניתוח, אירוע TargetConfigured
נכלל ב-BEP. זהו המקור המוסמך למאפיין יעד&PLURAL39;s"כלל התצורות שחלות על היעד מופיעות בילדות האירוע.
לדוגמה, יצירה באמצעות האפשרויות --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
בדיקות.
שורת פקודה לא מובנית
בניגוד ל-Commandline, אירוע זה מכיל את דגלי שורת הפקודה שלא נותחו בצורת מחרוזת, שכלי ה-build נתקל בהם אחרי שהרחיב את כל הקבצים של .bazelrc
והתייחס לסימון --config
.
אפשר להסתמך על האירוע UnstructuredCommandLine
כדי לשחזר במדויק ביצוע של פקודה נתונה.
הגדרת Workspace
אירוע WorkspaceConfig
אחד מכיל פרטי תצורה לגבי סביבת העבודה, כגון שורש ההפעלה.
סטטוס Workspace
אירוע WorkspaceStatus
יחיד מכיל את התוצאה של פקודת סטטוס סביבת העבודה.