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

รายงานปัญหา ดูแหล่งที่มา

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

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

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

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