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

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

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

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

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

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

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

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

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

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

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

  • 49 - สงวนไว้สำหรับการใช้งานภายใน 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 หากต้องการ ข้อความเหล่านี้

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

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