Build Event Protocol (BEP) ช่วยให้โปรแกรมของบุคคลที่สามได้รับข้อมูลเชิงลึกเกี่ยวกับการเรียกใช้ Bazel ตัวอย่างเช่น คุณอาจใช้ BEP เพื่อรวบรวมข้อมูลสำหรับปลั๊กอิน IDE หรือแดชบอร์ดที่แสดงผลการบิลด์
โปรโตคอลคือชุดข้อความ protocol buffer ที่มี ความหมายบางอย่างที่กำหนดไว้ด้านบน ซึ่งรวมถึงข้อมูลเกี่ยวกับผลลัพธ์ของการบิลด์และการทดสอบ ความคืบหน้าของการบิลด์ การกำหนดค่าบิลด์ และอื่นๆ อีกมากมาย BEP มีไว้เพื่อใช้แบบเป็นโปรแกรมและทำให้การแยกวิเคราะห์เอาต์พุตบรรทัดคำสั่งของ Bazel เป็นเรื่องในอดีต
Build Event Protocol แสดงข้อมูลเกี่ยวกับการสร้างเป็นเหตุการณ์ เหตุการณ์บิลด์คือข้อความบัฟเฟอร์โปรโตคอลที่ประกอบด้วยตัวระบุเหตุการณ์บิลด์ ชุดตัวระบุเหตุการณ์ย่อย และเพย์โหลด
สร้างตัวระบุเหตุการณ์: เหตุการณ์บิลด์อาจเป็นสตริง ที่ไม่โปร่งใส หรือข้อมูล ที่มีโครงสร้าง ซึ่งเผยให้เห็นรายละเอียดเพิ่มเติมเกี่ยวกับเหตุการณ์บิลด์ ทั้งนี้ขึ้นอยู่กับประเภทของเหตุการณ์บิลด์ ตัวระบุเหตุการณ์บิลด์จะไม่ซ้ำกันภายใน บิลด์
เหตุการณ์ย่อย: เหตุการณ์บิลด์อาจประกาศเหตุการณ์บิลด์อื่นๆ โดยการใส่ตัวระบุเหตุการณ์บิลด์ในฟิลด์เหตุการณ์ย่อย เช่น เหตุการณ์บิลด์
PatternExpandedจะประกาศเป้าหมายที่ขยายเป็นองค์ประกอบย่อย โปรโตคอลรับประกันว่าเหตุการณ์ทั้งหมด ยกเว้นเหตุการณ์แรก จะได้รับการประกาศโดยเหตุการณ์ก่อนหน้าเพย์โหลด: เพย์โหลดมีข้อมูลที่มีโครงสร้างเกี่ยวกับเหตุการณ์บิลด์ ซึ่งเข้ารหัสเป็นข้อความบัฟเฟอร์โปรโตคอลที่เฉพาะเจาะจงสำหรับเหตุการณ์นั้น โปรดทราบว่า เพย์โหลดอาจไม่ใช่ประเภทที่คาดไว้ แต่อาจเป็น
Abortedข้อความ หากการสร้างถูกยกเลิกก่อนเวลา
สร้างกราฟเหตุการณ์
เหตุการณ์การสร้างทั้งหมดจะสร้างกราฟแบบมีทิศทางและไม่มีวัฏจักรผ่านความสัมพันธ์หลักและย่อย เหตุการณ์บิลด์ทุกเหตุการณ์ ยกเว้นเหตุการณ์บิลด์เริ่มต้น จะมีเหตุการณ์ระดับบนอย่างน้อย 1 เหตุการณ์ โปรดทราบว่ากิจกรรมหลักของกิจกรรมย่อยไม่จำเป็นต้องโพสต์ก่อนกิจกรรมย่อยเสมอไป เมื่อการสร้างเสร็จสมบูรณ์ (สำเร็จหรือไม่สำเร็จ) ระบบจะโพสต์เหตุการณ์ที่ประกาศทั้งหมด ในกรณีที่ Bazel ขัดข้องหรือการรับส่งข้อมูลเครือข่ายล้มเหลว ระบบอาจไม่โพสต์เหตุการณ์การสร้างที่ประกาศไว้บางรายการ
โครงสร้างของกราฟเหตุการณ์จะแสดงวงจรของคำสั่ง กราฟ BEP ทุกกราฟมีรูปร่างลักษณะต่อไปนี้
- เหตุการณ์รูทจะเป็นเหตุการณ์
BuildStartedเสมอ ส่วนเหตุการณ์อื่นๆ ทั้งหมดคือเหตุการณ์ที่สืบทอดมาจากเหตุการณ์นี้ - บุตรหลานโดยตรงของเหตุการณ์ BuildStarted มีข้อมูลเมตาเกี่ยวกับคำสั่ง
- เหตุการณ์ที่มีข้อมูลที่สร้างขึ้นโดยคำสั่ง เช่น ไฟล์ที่สร้างขึ้นและผลการทดสอบ จะปรากฏก่อนเหตุการณ์
BuildFinished - เหตุการณ์
BuildFinishedอาจตามด้วยเหตุการณ์ที่มีข้อมูลสรุปเกี่ยวกับการบิลด์ (เช่น ข้อมูลเมตริก หรือการสร้างโปรไฟล์)
การใช้โปรโตคอล Build Event
ใช้ในรูปแบบไบนารี
หากต้องการใช้ BEP ในรูปแบบไบนารี ให้ทำดังนี้
ให้ Bazel จัดลำดับข้อความบัฟเฟอร์โปรโตคอลเป็นไฟล์โดยการระบุตัวเลือก
--build_event_binary_file=/path/to/fileไฟล์จะมีข้อความบัฟเฟอร์โปรโตคอลที่ซีเรียลไลซ์ โดยแต่ละข้อความจะมีการจำกัดความยาว ข้อความแต่ละรายการจะมีคำนำหน้าเป็นความยาวของข้อความที่เข้ารหัสเป็นจำนวนเต็มที่มีความยาวผันแปร อ่านรูปแบบนี้ได้โดยใช้เมธอดparseDelimitedFrom(InputStream)ของไลบรารีบัฟเฟอร์โปรโตคอลจากนั้นเขียนโปรแกรมที่ดึงข้อมูลที่เกี่ยวข้องจากข้อความบัฟเฟอร์โปรโตคอลที่ซีเรียลไลซ์
ใช้ในรูปแบบข้อความหรือ JSON
แฟล็กบรรทัดคำสั่ง Bazel ต่อไปนี้จะแสดงผล BEP ในรูปแบบที่มนุษย์อ่านได้ เช่น ข้อความและ JSON
--build_event_text_file
--build_event_json_file
บริการ Build Event
โปรโตคอลบริการ Build Event
เป็นบริการ gRPC ทั่วไปสำหรับการเผยแพร่เหตุการณ์การสร้าง โปรโตคอลบริการ Build Event
ไม่ขึ้นอยู่กับ BEP และถือว่าเหตุการณ์ BEP เป็นไบต์ที่ทึบแสง
Bazel มาพร้อมกับการติดตั้งใช้งานไคลเอ็นต์ gRPC ของโปรโตคอล Build Event Service ที่
เผยแพร่เหตุการณ์โปรโตคอล Build Event ผู้ใช้สามารถระบุปลายทางที่จะส่งเหตุการณ์ได้โดยใช้แฟล็ก --bes_backend=HOST:PORT หากแบ็กเอนด์ใช้ gRPC
คุณต้องนำหน้าที่อยู่ด้วยรูปแบบที่เหมาะสม: grpc:// สำหรับ gRPC แบบข้อความธรรมดา
และ grpcs:// สำหรับ gRPC ที่เปิดใช้ TLS
แฟล็กบริการ Build Event
Bazel มีแฟล็กหลายรายการที่เกี่ยวข้องกับโปรโตคอลบริการเหตุการณ์บิลด์ ซึ่งรวมถึง
--bes_backend--[no]bes_lifecycle_events--bes_results_url--bes_timeout--bes_instance_name
ดูคำอธิบายของแต่ละแฟล็กได้ที่ข้อมูลอ้างอิงของบรรทัดคำสั่ง
การตรวจสอบสิทธิ์และความปลอดภัย
การติดตั้งใช้งาน Build Event Service ของ Bazel ยังรองรับการตรวจสอบสิทธิ์และ TLS ด้วย คุณควบคุมการตั้งค่าเหล่านี้ได้โดยใช้ฟีเจอร์ค่าสถานะด้านล่าง โปรดทราบว่าแฟล็กเหล่านี้ยังใช้สำหรับการดำเนินการจากระยะไกลของ Bazel ด้วย ซึ่งหมายความว่า Build Event Service และปลายทางการดำเนินการจากระยะไกลต้องใช้โครงสร้างพื้นฐานการตรวจสอบสิทธิ์และ TLS เดียวกัน
--[no]google_default_credentials--google_credentials--google_auth_scopes--tls_certificate--[no]tls_enabled
ดูคำอธิบายของแต่ละแฟล็กได้ที่ข้อมูลอ้างอิงของบรรทัดคำสั่ง
บริการ Build Event และการแคชระยะไกล
โดยปกติแล้ว BEP จะมีการอ้างอิงไฟล์บันทึกจำนวนมาก (test.log, test.xml, etc. ) ที่จัดเก็บไว้ในเครื่องที่ Bazel ทำงานอยู่ โดยปกติแล้วเซิร์ฟเวอร์ BES ระยะไกล จะเข้าถึงไฟล์เหล่านี้ไม่ได้เนื่องจากอยู่ในเครื่องที่แตกต่างกัน วิธีแก้ปัญหานี้คือการใช้ Bazel กับการแคชระยะไกล Bazel จะอัปโหลดไฟล์เอาต์พุตทั้งหมดไปยังแคชระยะไกล (รวมถึงไฟล์ที่อ้างอิงใน BEP) จากนั้นเซิร์ฟเวอร์ BES จะดึงไฟล์ที่อ้างอิงจากแคชได้
ดูรายละเอียดเพิ่มเติมได้ที่ปัญหา GitHub 3689