กล้อง Bazel

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

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

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

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

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

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