คุณเรียกใช้ Bazel จากสคริปต์เพื่อทำการบิลด์ เรียกใช้การทดสอบ หรือค้นหากราฟการขึ้นต่อกันได้ Bazel ได้รับการออกแบบมาเพื่อให้การเขียนสคริปต์มีประสิทธิภาพ แต่ส่วนนี้จะแสดงรายละเอียดบางอย่างที่ควรคำนึงถึงเพื่อให้สคริปต์ของคุณมีประสิทธิภาพมากขึ้น
การเลือกฐานเอาต์พุต
--output_base
option ควบคุมตำแหน่งที่กระบวนการ 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
- สงวนไว้สำหรับการใช้งานภายในของ Google35
- สงวนไว้สำหรับการใช้งานภายในของ Google36
- ปัญหาสิ่งแวดล้อมในพื้นที่ คาดว่าจะเป็นปัญหาถาวร37
- ข้อยกเว้นที่ไม่ได้จัดการ / ข้อผิดพลาดภายในของ Bazel38
- ข้อผิดพลาดชั่วคราวในการเผยแพร่ผลลัพธ์ไปยังบริการ Build Event39
- ระบบจะนำ Blob ที่ Bazel ต้องการออกจากแคชระยะไกล41-44
- สงวนไว้สำหรับการใช้งานภายในของ Google45
- ผลการเผยแพร่ข้อผิดพลาดแบบถาวรไปยังบริการ Build Event47
- สงวนไว้สำหรับการใช้งานภายในของ Google49
- สงวนไว้สำหรับการใช้งานภายในของ 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 ที่มีค่าสูงมากหากคุณใช้ข้อความเหล่านี้