เหตุใด Bazel

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

Bazel รวดเร็ว

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

ระบบรองรับเลเยอร์การแคชหลายเลเยอร์ ทั้งในหน่วยความจำ บนดิสก์ และในฟาร์มบิลด์ระยะไกล (หากมี) ที่ Google เรามักจะได้รับอัตราการเข้าชมแคชมากกว่า 99%

Bazel ถูกต้อง

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

บอกลาการเรียกใช้ make clean ไม่รู้จบและการไล่ตามบั๊กที่ไม่มีอยู่จริงซึ่งได้รับการแก้ไขแล้วในซอร์สโค้ดที่ไม่เคยถูกสร้าง

Bazel ขยายได้

ใช้ประโยชน์จากความสามารถเต็มรูปแบบของ Bazel ด้วยการเขียนกฎและมาโครของคุณเองเพื่อปรับแต่ง Bazel ให้ตรงกับความต้องการเฉพาะของคุณในโปรเจ็กต์ที่หลากหลาย

กฎของ Bazel เขียนขึ้นใน Starlark ซึ่งเป็น ภาษาเขียนโปรแกรมภายในองค์กรของเราที่เป็นส่วนย่อยของ Python Starlark ช่วยให้นักพัฒนาซอฟต์แวร์ส่วนใหญ่เขียนกฎได้ง่ายขึ้น รวมถึงสร้างกฎที่ใช้ได้ในระบบนิเวศ

การทดสอบที่ผสานรวม

ตัวเรียกใช้การทดสอบที่ผสานรวม ของ Bazel จะทราบและเรียกใช้เฉพาะการทดสอบที่ต้องเรียกใช้ซ้ำ โดยใช้การดำเนินการระยะไกล (หากมี) เพื่อเรียกใช้การทดสอบแบบขนาน ตรวจหาความไม่แน่นอนตั้งแต่เนิ่นๆ โดยใช้การดำเนินการระยะไกลเพื่อเรียกใช้การทดสอบหลายพันครั้งอย่างรวดเร็ว

Bazel มีฟีเจอร์สำหรับอัปโหลดผลการทดสอบไปยังตำแหน่งส่วนกลาง ซึ่งช่วยให้การสื่อสารผลการทดสอบมีประสิทธิภาพ ไม่ว่าจะอยู่ใน CI หรือโดยนักพัฒนาซอฟต์แวร์แต่ละราย

การสนับสนุนหลายภาษา

Bazel รองรับภาษาเขียนโปรแกรมทั่วไปหลายภาษา รวมถึง C++, Java, Kotlin, Python, Go และ Rust คุณสามารถสร้างไบนารีหลายรายการ (เช่น แบ็กเอนด์, เว็บ UI และแอปบนอุปกรณ์เคลื่อนที่) ในการเรียกใช้ Bazel เดียวกันโดยไม่ต้องจำกัดอยู่เฉพาะเครื่องมือบิลด์ที่เป็นภาษาเดียว

การรองรับหลายที่เก็บ

Bazel สามารถรวบรวมซอร์สโค้ดจากหลายตำแหน่ง คุณ ไม่จำเป็นต้องจัดจำหน่ายทรัพยากร Dependency (แต่ทำได้) แต่คุณสามารถชี้ Bazel ไปยังตำแหน่งของซอร์สโค้ดหรืออาร์ติแฟกต์ที่สร้างไว้ล่วงหน้า (เช่น ที่เก็บ Git หรือ Maven Central) แล้วระบบจะจัดการส่วนที่เหลือให้

การรองรับหลายแพลตฟอร์ม

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

ระบบนิเวศที่กว้างขวาง

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