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

รายงานปัญหา ดูแหล่งที่มา /3} /4} {3/4} {3/4} {3/4} {3/4} /4.

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

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

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

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

  • เด็ก: เหตุการณ์บิลด์อาจประกาศเหตุการณ์บิลด์อื่นๆ โดยรวมตัวระบุเหตุการณ์บิลด์ไว้ในช่องย่อย ตัวอย่างเช่น เหตุการณ์บิลด์ 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 ทั่วไปสำหรับการเผยแพร่เหตุการณ์บิลด์ โปรโตคอลบริการ Build Event ไม่ขึ้นอยู่กับ 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 ด้วย คุณควบคุมการตั้งค่าเหล่านี้ได้โดยใช้แฟล็กด้านล่าง โปรดทราบว่าการติดธงเหล่านี้ยังใช้สำหรับการดำเนินการระยะไกลของ Bazel ด้วย ซึ่งหมายความว่าปลายทางบริการ Build Event และปลายทางการดำเนินการระยะไกลต้องใช้การตรวจสอบสิทธิ์และโครงสร้างพื้นฐาน 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