ข้อมูลเบื้องต้นเกี่ยวกับ Bazel

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

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

ประโยชน์

Bazel มีข้อดีดังต่อไปนี้

  • ภาษาบิลด์ระดับสูง Bazel ใช้ภาษานามธรรมที่มนุษย์อ่านได้เพื่ออธิบายพร็อพเพอร์ตี้บิลด์ของโปรเจ็กต์ในระดับสูง Bazel ทำงานตามแนวคิดเกี่ยวกับไลบรารี ไบนารี สคริปต์ และชุดข้อมูล เพื่อป้องกันความยุ่งยากในการเขียนการเรียกไปยังเครื่องมือต่างๆ เช่น คอมไพเลอร์และ Linker

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

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

  • สเกลบาเซล Bazel รักษาความคล่องตัวในระหว่างจัดการบิลด์ที่มีไฟล์ต้นฉบับกว่า 100,000 ไฟล์ โดยใช้งานได้กับที่เก็บและฐานผู้ใช้ที่หลากหลาย ในหลายหมื่นรายการ

  • Bazel มีความยืดหยุ่น รองรับหลายภาษา และคุณขยาย Bazel ให้รองรับภาษาหรือเฟรมเวิร์กอื่นๆ ได้ด้วย

การใช้ Bazel

หากต้องการสร้างหรือทดสอบโปรเจ็กต์ด้วย Bazel โดยปกติคุณจะทำสิ่งต่อไปนี้

  1. ตั้งค่า Bazel ดาวน์โหลดและติดตั้ง Bazel

  2. ตั้งค่าพื้นที่ทำงานของโปรเจ็กต์ ซึ่งเป็นไดเรกทอรีที่ Bazel มองหาอินพุตของบิลด์และไฟล์ BUILD รวมถึงตำแหน่งที่เก็บเอาต์พุตของบิลด์

  3. เขียนไฟล์ BUILD ซึ่งจะบอก Bazel ถึงสิ่งที่ควรสร้างและวิธีสร้าง

    คุณเขียนไฟล์ BUILD โดยการประกาศเป้าหมายของบิลด์โดยใช้ Starlark ซึ่งเป็นภาษาเฉพาะโดเมน (ดูตัวอย่างที่นี่)

    เป้าหมายบิลด์จะระบุชุดอาร์ติแฟกต์อินพุตที่ Bazel จะสร้างบวกทรัพยากร Dependency ต่างๆ กฎบิลด์ Bazel จะใช้เพื่อสร้างอาร์ติแฟกต์ดังกล่าว และตัวเลือกที่กำหนดค่ากฎของบิลด์

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

  4. เรียกใช้ Bazel จากบรรทัดคำสั่ง Bazel วางเอาต์พุตในพื้นที่ทำงาน

นอกเหนือจากการสร้างแล้ว คุณยังใช้ Bazel เพื่อเรียกใช้การทดสอบและค้นหาบิลด์เพื่อติดตามทรัพยากร Dependency ในโค้ดได้ด้วย

ขั้นตอนการสร้าง Bazel

ขณะเรียกใช้บิลด์หรือการทดสอบ Bazel จะดำเนินการต่อไปนี้

  1. โหลด ไฟล์ BUILD ที่เกี่ยวข้องกับเป้าหมาย

  2. วิเคราะห์อินพุตและการขึ้นต่อกันของอินพุต ใช้กฎบิลด์ที่ระบุ และสร้างกราฟการดำเนินการ

  3. ดำเนินการการทำงานของบิลด์บนอินพุตจนกว่าจะมีการสร้างเอาต์พุตของบิลด์ขั้นสุดท้าย

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

กราฟการทำงาน

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

บทแนะนำสำหรับการเริ่มต้นใช้งาน

หากต้องการเริ่มต้นใช้งาน Bazel โปรดดูการเริ่มต้นใช้งานหรือข้ามไปยังบทแนะนำของ Bazel โดยตรง