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

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

คุณสามารถเรียกใช้ 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 จากฐาน Workspace หรือไดเรกทอรีหลักของผู้ใช้ ใช่หรือไม่ des คือทางเลือกสำหรับสคริปต์ของคุณ หากสคริปต์ของคุณจะต้อง สมบูรณ์แบบ มากมาย (เช่น เมื่อสร้างรุ่น) คุณควรปิดใช้การอ่าน ไฟล์ .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 หากต้องการ ข้อความเหล่านี้

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

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