โปรโตคอลเหตุการณ์บิลด์ (BEP) ช่วยให้โปรแกรมของบุคคลที่สามได้รับข้อมูลเชิงลึกเกี่ยวกับการเรียกใช้ Bazel ตัวอย่างเช่น คุณสามารถใช้ BEP เพื่อรวบรวมข้อมูลสำหรับปลั๊กอิน IDE หรือแดชบอร์ดที่แสดงผลการบิลด์
โปรโตคอลนี้เป็นชุดข้อความ โปรโตคอล บัฟเฟอร์ ที่มีการกำหนด ความหมายบางอย่างไว้ด้านบน ซึ่งรวมถึงข้อมูลเกี่ยวกับผลการบิลด์และการทดสอบ ความคืบหน้าในการบิลด์ การกำหนดค่าบิลด์ และอื่นๆ อีกมากมาย BEP มีไว้เพื่อใช้ในเชิงโปรแกรม และทำให้การแยกวิเคราะห์เอาต์พุตบรรทัดคำสั่งของ Bazel เป็นเรื่องในอดีต
โปรโตคอลเหตุการณ์บิลด์แสดงข้อมูลเกี่ยวกับการบิลด์เป็นเหตุการณ์ เหตุการณ์บิลด์คือข้อความบัฟเฟอร์โปรโตคอลที่ประกอบด้วยตัวระบุเหตุการณ์บิลด์ ชุดตัวระบุเหตุการณ์ย่อย และเพย์โหลด
ตัวระบุเหตุการณ์บิลด์: ตัวระบุนี้อาจเป็น สตริงทึบแสง หรือข้อมูลที่มีโครงสร้าง ซึ่งเผยให้เห็นข้อมูลเพิ่มเติมเกี่ยวกับเหตุการณ์บิลด์ ทั้งนี้ขึ้นอยู่กับประเภทของเหตุการณ์บิลด์ ตัวระบุเหตุการณ์บิลด์จะไม่ซ้ำกันภายในบิลด์
รายการย่อย: เหตุการณ์บิลด์อาจประกาศเหตุการณ์บิลด์อื่นๆ โดยการใส่ ตัวระบุเหตุการณ์บิลด์ของเหตุการณ์เหล่านั้นในช่อง รายการย่อย ตัวอย่างเช่น เหตุการณ์บิลด์
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 ของโปรโตคอลบริการเหตุการณ์บิลด์ที่เผยแพร่เหตุการณ์โปรโตคอลเหตุการณ์บิลด์ คุณสามารถระบุปลายทางที่จะส่งเหตุการณ์ได้โดยใช้แฟล็ก --bes_backend=HOST:PORT หากแบ็กเอนด์ใช้ gRPC คุณต้องนำหน้าแอดเดรสด้วยสคีมาที่เหมาะสม ได้แก่ grpc:// สำหรับ gRPC แบบข้อความธรรมดา และ grpcs:// สำหรับ gRPC ที่เปิดใช้ TLS
แฟล็กบริการเหตุการณ์บิลด์
Bazel มีแฟล็กหลายรายการที่เกี่ยวข้องกับโปรโตคอลบริการเหตุการณ์บิลด์ ซึ่งรวมถึง
--bes_backend--[no]bes_lifecycle_events--bes_results_url--bes_timeout--bes_instance_name
ดูคำอธิบายของแฟล็กแต่ละรายการได้ที่ ข้อมูลอ้างอิงบรรทัดคำสั่ง
การตรวจสอบสิทธิ์และความปลอดภัย
การใช้งานบริการเหตุการณ์บิลด์ของ Bazel ยังรองรับการตรวจสอบสิทธิ์และ TLS ด้วย คุณสามารถควบคุมการตั้งค่าเหล่านี้ได้โดยใช้แฟล็กด้านล่าง โปรดทราบว่าแฟล็กเหล่านี้ใช้สำหรับการดำเนินการระยะไกลของ 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สำหรับ