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