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

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

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

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

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

หากคุณใช้ค่าฐานเอาต์พุตเริ่มต้น คุณจะต้องแข่งขันเพื่อใช้การล็อกเดียวกันกับที่คำสั่ง 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 - ระบบนำ Blob ที่ 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 จากไดเรกทอรีพื้นที่ทำงานฐาน หรือไดเรกทอรีหลักของผู้ใช้ การอ่านไฟล์นี้หรือไม่นั้นขึ้นอยู่กับสคริปต์ของคุณ หากสคริปต์ต้องทำงานได้อย่างสมบูรณ์แบบ (เช่น เมื่อทำการบิลด์เวอร์ชันที่เผยแพร่) คุณควรปิดใช้การอ่านไฟล์ .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 ซึ่งจะควบคุมว่าจะพิมพ์ข้อความ "build up-to-date" หรือไม่ คุณสามารถแยกวิเคราะห์ข้อความเหล่านี้เพื่อ ค้นหาเป้าหมายที่บิลด์สำเร็จและตำแหน่งของไฟล์เอาต์พุต ที่เป้าหมายเหล่านั้นสร้างขึ้น โปรดระบุค่า n ที่มีขนาดใหญ่มากหากคุณใช้ข้อความเหล่านี้

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

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