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