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