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

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

คุณสามารถเรียก Bazel จากสคริปต์เพื่อสร้าง เรียกใช้การทดสอบ หรือค้นหากราฟทรัพยากร Dependency ได้ 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

  • 39 - บล็อบที่ Bazel ต้องการจะถูกนำออกจากแคชระยะไกล

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

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

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

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

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

สำหรับ bazel run:

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

สำหรับ bazel query:

  • 3 - สำเร็จบางส่วน แต่การค้นหาพบข้อผิดพลาดอย่างน้อย 1 รายการในชุดไฟล์ BUILD อินพุต ดังนั้นผลลัพธ์ของการดำเนินการจึงไม่น่าเชื่อถือ 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 หากคุณใช้ข้อความเหล่านี้

การแก้ปัญหาประสิทธิภาพตามการทำโปรไฟล์

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