กล้อง Bazel

รายงานปัญหา ดูซอร์สโค้ด รุ่น Nightly · 8.0 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

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

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

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

เราเชื่อว่า Bazel มีศักยภาพที่จะบรรลุวิสัยทัศน์นี้ได้

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

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

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

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

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

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

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

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

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

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

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

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

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