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