กำลังโทรหา Bazel จากสคริปต์

คุณสามารถเรียกใช้ Bazel จากสคริปต์เพื่อสร้าง เรียกใช้การทดสอบ หรือค้นหากราฟการอ้างอิง Bazel ได้รับการออกแบบมาเพื่อทำให้สคริปต์มีประสิทธิภาพ แต่ส่วนนี้แสดงรายละเอียดบางอย่างที่ต้องคำนึงถึงเพื่อให้สคริปต์มีประสิทธิภาพมากขึ้น

การเลือกฐานเอาต์พุต

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

การเลือกไดเรกทอรีฐานเอาต์พุตที่ถูกต้องสำหรับสคริปต์นั้นจะขึ้นอยู่กับหลายปัจจัย หากต้องการใส่เอาต์พุตของบิลด์ในตำแหน่งที่เฉพาะเจาะจง ก็จะเป็นตัวกำหนดฐานเอาต์พุตที่คุณต้องการใช้ หากคุณเรียกใช้Bazel (เช่น bazel query) แบบ "อ่านอย่างเดียว" ปัจจัยการล็อกจะสําคัญกว่า โดยเฉพาะอย่างยิ่ง หากคุณต้องการเรียกใช้สคริปต์หลายอินสแตนซ์พร้อมกัน คุณจะต้องให้ฐานเอาต์พุตที่แตกต่างกัน (หรือแบบสุ่ม) ให้แต่ละรายการ

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

หมายเหตุเกี่ยวกับโหมดเซิร์ฟเวอร์

โดยค่าเริ่มต้น Bazel จะใช้กระบวนการของเซิร์ฟเวอร์ที่กินเวลานานเป็นการเพิ่มประสิทธิภาพ เมื่อใช้ Bazel ในสคริปต์ อย่าลืมเรียกใช้ shutdown เมื่อทำงานกับเซิร์ฟเวอร์เสร็จแล้ว หรือระบุ --max_idle_secs=5 เพื่อให้เซิร์ฟเวอร์ที่ไม่ได้ใช้งานปิดตัวเองทันที

ฉันจะได้รับรหัสสำหรับออกอะไร

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

ออกจากโค้ดทั่วไปในคำสั่งทั้งหมด

  • 0 - สำเร็จ
  • 2 - ปัญหาบรรทัดคำสั่ง แฟล็กหรือชุดคำสั่งที่ไม่ถูกต้องหรือไม่ถูกต้อง หรือ ตัวแปรสภาพแวดล้อมที่ไม่ถูกต้อง ต้องแก้ไขบรรทัดคำสั่ง
  • 8 - การสร้างขัดข้องแต่เราได้ยุติลงพร้อมกับปิดระบบอย่างเป็นลำดับ
  • 9 - ล็อกเซิร์ฟเวอร์ค้างไว้และผ่าน --noblock_for_lock แล้ว
  • 32 - เครื่องนี้ไม่มีการทำงานล้มเหลวของสภาพแวดล้อมภายนอก

  • 33 - Bazel หน่วยความจำเต็มและขัดข้อง คุณต้องแก้ไขบรรทัดคำสั่ง

  • 34 - สงวนไว้สำหรับการใช้งานภายใน Google

  • 35 - สงวนไว้สำหรับการใช้งานภายใน Google

  • 36 - ปัญหาสิ่งแวดล้อมในท้องถิ่น สงสัยว่าเป็นปัญหาถาวร

  • 37 - ข้อยกเว้นที่ไม่มีการจัดการ / ข้อผิดพลาดภายในของ Bazel

  • 38 - สงวนไว้สำหรับการใช้งานภายใน Google

  • 41-44 - สงวนไว้สำหรับการใช้งานภายใน Google

  • 45 - เกิดข้อผิดพลาดขณะเผยแพร่ผลลัพธ์ไปยังบริการเหตุการณ์บิลด์

  • 47 - สงวนไว้สำหรับการใช้งานภายใน Google

ส่งคืนรหัสสำหรับคำสั่ง bazel build, bazel test:

  • 1 - การสร้างล้มเหลว
  • 3 - บิวด์เป็นปกติ แต่การทดสอบบางอย่างล้มเหลวหรือหมดเวลา
  • 4 - สร้างสำเร็จแต่ไม่พบการทดสอบแม้ว่าจะมีการขอการทดสอบ

สำหรับ bazel run:

  • 1 - การสร้างล้มเหลว
  • หากบิลด์สำเร็จแต่กระบวนการย่อยที่ดำเนินการแล้วแสดงผลโค้ดการออกที่ไม่ใช่ 0 โค้ดการออกจะเป็นโค้ดการออกของคำสั่งเช่นกัน

สำหรับ bazel query:

  • 3 - สำเร็จบางส่วน แต่การค้นหาพบข้อผิดพลาดอย่างน้อย 1 รายการในชุดไฟล์อินพุตที่สร้าง ดังนั้นผลลัพธ์ของการดำเนินการจึงไม่น่าเชื่อถือ 100% ซึ่งอาจเกิดจากตัวเลือก --keep_going ในบรรทัดคำสั่ง
  • 7 - คำสั่งล้มเหลว

เวอร์ชัน Bazel ในอนาคตอาจเพิ่มรหัสการออกเพิ่มเติม โดยแทนที่รหัสการออกที่ล้มเหลวทั่วไป 1 ด้วยค่าที่ไม่ใช่ 0 ที่ต่างออกไปโดยให้ความหมายเฉพาะ อย่างไรก็ตาม ค่าการออกทั้งหมดที่ไม่ใช่ 0 จะประกอบขึ้นเป็นข้อผิดพลาดเสมอ

กำลังอ่านไฟล์ .bazelrc

โดยค่าเริ่มต้น Bazel จะอ่านไฟล์ .bazelrc จากไดเรกทอรีพื้นที่ทำงานพื้นฐานหรือไดเรกทอรีหน้าแรกของผู้ใช้ ต้องการให้สคริปต์ทำงานหรือไม่ หากสคริปต์ต้องสอดคล้องกันทั้งหมด (เช่น เมื่อสร้างบิลด์) คุณควรปิดใช้การอ่านไฟล์ .bazelrc โดยใช้ตัวเลือก --bazelrc=/dev/null หากคุณต้องการสร้าง โดยใช้การตั้งค่าที่ผู้ใช้ต้องการ ลักษณะการทำงานเริ่มต้นจะดีกว่า

บันทึกคำสั่ง

นอกจากนี้ เอาต์พุต Bazel ยังพร้อมใช้งานในไฟล์บันทึกคำสั่ง ซึ่งค้นหาได้ด้วยคำสั่งต่อไปนี้

bazel info command_log

ไฟล์บันทึกคำสั่งมีสตรีม Stdout และ stderr แบบแทรกสลับของคำสั่ง Bazel ล่าสุด โปรดทราบว่าการเรียกใช้ bazel info จะเขียนทับเนื้อหาของไฟล์นี้ เนื่องจากหลังจากนั้นจะกลายเป็นคำสั่ง Bazel ล่าสุด แต่ตำแหน่งของไฟล์บันทึกคำสั่งจะไม่เปลี่ยนแปลงจนกว่าคุณจะเปลี่ยนการตั้งค่าของตัวเลือก --output_base หรือ --output_user_root

กำลังแยกวิเคราะห์เอาต์พุต

เอาต์พุต Bazel นี้แยกวิเคราะห์ได้ง่ายสำหรับวัตถุประสงค์หลายอย่าง ตัวเลือก 2 รายการที่อาจเป็นประโยชน์สำหรับสคริปต์คือ --noshow_progress ซึ่งจะระงับข้อความความคืบหน้าและ --show_result n ที่ควบคุมว่าจะพิมพ์ข้อความ "สร้างข้อมูลล่าสุด" หรือไม่ อาจมีการแยกวิเคราะห์ข้อความเหล่านี้เพื่อค้นหาว่าเป้าหมายใดสร้างสำเร็จแล้ว และตำแหน่งของไฟล์เอาต์พุตที่โปรแกรมสร้าง อย่าลืมระบุค่า n ที่สูงมากหากคุณใช้ข้อความเหล่านี้

การแก้ปัญหาประสิทธิภาพโดยการสร้างโปรไฟล์

ดูส่วนการทำโปรไฟล์ประสิทธิภาพ