กล้อง Bazel

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

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

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

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

เราเชื่อว่า Bazel มีศักยภาพที่จะทำให้วิสัยทัศน์นี้เป็นจริงได้

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

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

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

ความสามารถหลักของ Bazel

  1. Bazel รองรับการสร้างและการทดสอบหลายภาษาและหลายแพลตฟอร์ม คุณสามารถเรียกใช้คำสั่งเดียวเพื่อสร้างและทดสอบทั้ง Source Tree ไม่ว่าคุณจะกำหนดเป้าหมายเป็นภาษาและแพลตฟอร์มใดก็ตาม
  2. บิลด์ของ Bazel รวดเร็วและถูกต้อง การเรียกใช้บิลด์และการทดสอบทุกครั้งจะเป็นแบบทีละน้อย ทั้งในเครื่องของนักพัฒนาซอฟต์แวร์และใน CI
  3. Bazel มีภาษาที่สม่ำเสมอและขยายได้ เพื่อกำหนดบิลด์สำหรับภาษาหรือแพลตฟอร์มใดก็ได้
  4. Bazel ช่วยให้ปรับขนาด บิลด์ได้โดยการเชื่อมต่อกับบริการการดำเนินการจากระยะไกลและการแคช
  5. Bazel ทำงานได้ในแพลตฟอร์มการพัฒนาหลักทั้งหมด (Linux, MacOS และ Windows)
  6. เรายอมรับว่าการนำ Bazel ไปใช้ต้องใช้ความพยายาม แต่การนำไปใช้ทีละน้อย ก็เป็นไปได้ Bazel มีอินเทอร์เฟซกับเครื่องมือมาตรฐานโดยพฤตินัยสำหรับภาษา/แพลตฟอร์มที่กำหนด

การให้บริการชุมชนภาษา

วิศวกรรมซอฟต์แวร์พัฒนาขึ้นในบริบทของชุมชนภาษา ซึ่งโดยทั่วไปจะเป็นกลุ่มคนที่จัดระเบียบตนเองซึ่งใช้เครื่องมือและแนวทางปฏิบัติร่วมกัน

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

Bazel มุ่งมั่นที่จะขยายได้และเปิดกว้าง รวมถึงรองรับชุดกฎที่ดีสำหรับทุกภาษา

ข้อกำหนดของชุดกฎที่ดี

  1. กฎต้องรองรับการสร้างและการทดสอบ ที่มีประสิทธิภาพสำหรับภาษา รวมถึงการครอบคลุมของโค้ด
  2. กฎต้องมีอินเทอร์เฟซกับ "ตัวจัดการแพ็กเกจ" ที่ใช้กันอย่างแพร่หลาย สำหรับภาษา (เช่น Maven สำหรับ Java) และรองรับเส้นทางการย้ายข้อมูลทีละน้อยจากระบบบิลด์อื่นๆ ที่ใช้กันอย่างแพร่หลาย
  3. กฎต้องขยายได้และทำงานร่วมกันได้ ตามหลักการ "แซนวิช Bazel"
  4. กฎต้องพร้อมสำหรับการดำเนินการจากระยะไกล ในทางปฏิบัติ หมายความว่า กำหนดค่าได้โดยใช้ กลไก Toolchain
  5. กฎ (และ Bazel) ต้องมีอินเทอร์เฟซกับ IDE ที่ใช้กันอย่างแพร่หลาย สำหรับภาษา หากมี
  6. กฎต้องมีเอกสารประกอบที่ละเอียดและใช้งานได้ พร้อมเนื้อหาเบื้องต้นสำหรับผู้ใช้ใหม่ และเอกสารที่ครอบคลุมสำหรับผู้ใช้ผู้เชี่ยวชาญ

แต่ละรายการเหล่านี้มีความสำคัญ และเมื่อรวมกันแล้วเท่านั้นที่จะแสดงความสามารถของ Bazel สำหรับระบบนิเวศนั้นๆ ได้

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