สร้างโปรโตคอลเหตุการณ์

วันที่ รายงานปัญหา ดูแหล่งที่มา ตอนกลางคืน · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

เหตุการณ์การสร้าง โปรโตคอล (BEP) อนุญาตให้โปรแกรมของบุคคลที่สามได้รับข้อมูลเชิงลึกเกี่ยวกับคำขอ Bazel สำหรับ เช่น ใช้ BEP เพื่อรวบรวมข้อมูลสำหรับ IDE ปลั๊กอินหรือหน้าแดชบอร์ดที่แสดงผลลัพธ์ของบิลด์

โปรโตคอลคือชุดโปรโตคอล บัฟเฟอร์ข้อความกับ อรรถศาสตร์ที่นิยามไว้ด้วย ซึ่งมีข้อมูลเกี่ยวกับบิลด์และการทดสอบ ผลลัพธ์ ความคืบหน้าของบิลด์ การกำหนดค่าบิลด์ และอื่นๆ อีกมากมาย BEP คือ ที่มีจุดประสงค์เพื่อการใช้งานแบบเป็นโปรแกรม และในการแยกวิเคราะห์ ผ่านบรรทัดคำสั่งมาได้

โปรโตคอลเหตุการณ์บิลด์จะแสดงข้อมูลเกี่ยวกับบิลด์เป็นเหตุการณ์ ต เหตุการณ์บิลด์คือข้อความบัฟเฟอร์โปรโตคอลซึ่งประกอบด้วยตัวระบุเหตุการณ์บิลด์ ชุดตัวระบุเหตุการณ์ย่อยและเพย์โหลด

  • ตัวระบุเหตุการณ์ของบิลด์: พารามิเตอร์นี้อาจใช้ ทึบแสง สตริง หรือมีโครงสร้าง ข้อมูล ที่เปิดเผยเพิ่มเติมเกี่ยวกับเหตุการณ์บิลด์ ตัวระบุเหตุการณ์บิลด์ไม่ซ้ำภายใน งานสร้าง

  • เด็ก: กิจกรรมบิลด์อาจประกาศกิจกรรมบิลด์อื่นๆ โดยการรวม ตัวระบุเหตุการณ์บิลด์ย่อย ได้ ตัวอย่างเช่น เหตุการณ์บิลด์ PatternExpanded ที่ประกาศการขยายเป้าหมาย สำหรับเด็ก โปรโตคอลรับประกันว่ากิจกรรมทั้งหมด ยกเว้นกิจกรรมแรก มีการประกาศตามเหตุการณ์ก่อนหน้า

  • เพย์โหลด: เพย์โหลดมีข้อมูลที่มีโครงสร้างเกี่ยวกับเหตุการณ์บิลด์ ซึ่งเข้ารหัสเป็นข้อความบัฟเฟอร์โปรโตคอลเฉพาะสำหรับเหตุการณ์นั้น โปรดทราบว่า เพย์โหลดอาจไม่ใช่ประเภทที่คาดไว้ แต่อาจเป็นข้อความ Aborted หากเวอร์ชันล้มเลิกก่อนกำหนด

สร้างกราฟเหตุการณ์

เหตุการณ์บิลด์ทั้งหมดจะสร้างกราฟแบบวนซ้ำที่มีทิศทางผ่านพ่อแม่และบุตรหลาน ความสัมพันธ์ ทุกเหตุการณ์ของบิลด์ยกเว้นเหตุการณ์บิลด์เริ่มต้นจะมีเหตุการณ์ 1 หรือ กิจกรรมหลักเพิ่มเติม โปรดทราบว่ากิจกรรมหลักของกิจกรรมย่อยบางกิจกรรมอาจไม่เป็นไปตาม จะต้องโพสต์ก่อน เมื่อบิลด์เสร็จสมบูรณ์ (สำเร็จหรือล้มเหลว) ระบบจะโพสต์กิจกรรมที่ประกาศทั้งหมด ในกรณีที่เกิดอุบัติเหตุรถชน Bazel หรือความล้มเหลว การขนส่งเครือข่าย กิจกรรมบิลด์ที่ประกาศไว้บางรายการอาจไม่เคยโพสต์

โครงสร้างของกราฟเหตุการณ์จะแสดงวงจรของคำสั่ง ทุก BEP กราฟมีรูปร่างที่โดดเด่นดังต่อไปนี้

  1. เหตุการณ์รูทจะเป็น BuildStarted เสมอ กิจกรรม ส่วนกิจกรรมอื่นๆ ทั้งหมดจะเป็นกิจกรรมสืบทอด
  2. องค์ประกอบย่อยของเหตุการณ์ BuildStarted มีข้อมูลเมตาเกี่ยวกับ คำสั่ง
  3. เหตุการณ์ที่มีข้อมูลที่สร้างโดยคำสั่ง เช่น ไฟล์ที่สร้างและทดสอบ ผลลัพธ์ที่ปรากฏก่อน BuildFinished กิจกรรม
  4. กิจกรรม BuildFinished อาจเกิดขึ้นภายหลัง ตามเหตุการณ์ที่มีข้อมูลสรุปเกี่ยวกับบิลด์ (เช่น เมตริก หรือข้อมูลการทำโปรไฟล์)

การใช้โปรโตคอลเหตุการณ์บิลด์

ใช้งานในรูปแบบไบนารี

หากต้องการใช้ BEP ในรูปแบบไบนารี ให้ทำดังนี้

  1. ให้ Bazel แปลงข้อความบัฟเฟอร์โปรโตคอลไปยังไฟล์โดยระบุ ตัวเลือก --build_event_binary_file=/path/to/file ไฟล์จะประกอบด้วย ข้อความบัฟเฟอร์ของโปรโตคอลแบบอนุกรมที่แต่ละข้อความถูกคั่นด้วยความยาว ข้อความแต่ละข้อความจะมีการเข้ารหัสความยาวไว้ด้านหน้าโดยเป็นจำนวนเต็มความยาวแปรผัน รูปแบบนี้สามารถอ่านได้โดยใช้ไฟล์ parseDelimitedFrom(InputStream)

  2. จากนั้นเขียนโปรแกรมที่ดึงข้อมูลที่เกี่ยวข้องจาก ข้อความบัฟเฟอร์โปรโตคอลแบบอนุกรม

ใช้งานในรูปแบบข้อความหรือ 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_best_effort
  • --[no]bes_lifecycle_events
  • --bes_results_url
  • --bes_timeout
  • --project_id

สำหรับคำอธิบายเกี่ยวกับแฟล็กเหล่านี้ โปรดดูที่ การอ้างอิงบรรทัดคำสั่ง

การตรวจสอบสิทธิ์และความปลอดภัย

การใช้งานบริการ 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 สำหรับ รายละเอียดเพิ่มเติม