หน้านี้ครอบคลุมเรื่องลึกลับ ประโยชน์ของการใช้บิวด์เชิงมีกลยุทธ์ และกลยุทธ์สําหรับการระบุพฤติกรรมที่ไม่ใช่อารมณ์ทางเพศในบิลด์ของคุณ
ภาพรวม
หากได้รับซอร์สโค้ดอินพุตและการกําหนดค่าผลิตภัณฑ์เดียวกัน ระบบบิวด์แบบมีมธุรินจะแสดงผลเอาต์พุตเดียวกันเสมอโดยแยกบิลด์จากการเปลี่ยนแปลงไปยังระบบโฮสต์
ในการแยกบิลด์ บิลด์ที่สมุนไพรจะไม่คํานึงถึงไลบรารีและซอฟต์แวร์อื่นๆ ที่ติดตั้งในเครื่องโฮสต์ในเครื่องหรือระยะไกล โดยขึ้นอยู่กับเวอร์ชันบิลด์ของเครื่องมือสร้าง เช่น คอมไพเลอร์ และทรัพยากร Dependency เช่น ไลบรารี ซึ่งทําให้กระบวนการสร้างในตัวใช้งานได้ด้วยตนเองโดยไม่ต้องพึ่งพาบริการภายนอกสภาพแวดล้อมของบิลด์
สิ่งสําคัญ 2 ประการของความลึกลับ ได้แก่
- การแยก: ระบบบิวด์แบบ Hermetic จะถือว่าเครื่องมือเป็นซอร์สโค้ด โดยจะดาวน์โหลดสําเนาเครื่องมือและจัดการพื้นที่เก็บข้อมูล รวมถึงใช้ภายในไฟล์ที่มีการจัดการ ซึ่งจะสร้างการแยกข้อมูลระหว่างเครื่องโฮสต์และผู้ใช้ภายในเครื่อง ซึ่งรวมถึงภาษาในเวอร์ชันที่ติดตั้งแล้ว
- Identitysource: ระบบบิวด์แบบ Hermetic จะพยายามตรวจสอบว่าอินพุตเหมือนกัน ที่เก็บโค้ด เช่น Git สามารถระบุชุดการดัดแปลงโค้ดด้วยโค้ดแฮชที่ไม่ซ้ํากัน ระบบบิวด์แบบ Hermetic ใช้แฮชนี้เพื่อระบุการเปลี่ยนแปลงอินพุตของบิลด์
ข้อดี
ข้อดีหลักๆ ของสร้างมีมมีดังนี้
- ความเร็ว: แคชของการดําเนินการที่แคชไว้ได้และไม่จําเป็นต้องเรียกใช้อีกครั้ง เว้นแต่อินพุตจะเปลี่ยนไป
- การดําเนินการพร้อมกัน: สําหรับอินพุตและเอาต์พุต ระบบบิวด์จะสร้างกราฟการดําเนินการทั้งหมดเพื่อคํานวณการดําเนินการที่มีประสิทธิภาพและพร้อมกัน ระบบบิวด์จะโหลดกฎและคํานวณกราฟการดําเนินการและอินพุตแฮชเพื่อค้นหาในแคช
- บิลด์หลายรายการ: คุณอาจสร้างบิลด์จิตรกรรมหลายชิ้นในเครื่องเดียวกัน โดยสร้างแต่ละบิลด์โดยใช้เครื่องมือและเวอร์ชันต่างๆ
- การทําซ้ําได้: บิวด์เชิงมีมรสุมเหมาะสําหรับการแก้ปัญหาเนื่องจากคุณทราบเงื่อนไขที่แน่นอนที่สร้างบิลด์
การระบุว่าไม่มีอารมณ์ร่วม
หากคุณกําลังเตรียมที่จะเปลี่ยนไปใช้ Bazel การย้ายข้อมูลจะง่ายขึ้นหากคุณปรับปรุงระดับความสําคัญที่มีอยู่ของบิลด์ที่มีอยู่ สาเหตุทั่วไปที่ทําให้เนื้อหาของคุณไม่แพร่หลาย ได้แก่
- การประมวลผลที่กําหนดเองในไฟล์
.mk
รายการ - การดําเนินการหรือเครื่องมือที่สร้างไฟล์ซึ่งไม่มีคําอธิบาย โดยทั่วไปจะเกี่ยวข้องกับการสร้างรหัสหรือการประทับเวลา
- ไบนารีของระบบที่แตกต่างกันในโฮสต์ (เช่น ไบนารี
/usr/bin
, เส้นทางสัมบูรณ์, คอมไพเลอร์ C++ ของระบบสําหรับการกําหนดค่ากฎ C++ แบบเนทีฟ) - เขียนไปยังโครงสร้างต้นทางระหว่างการสร้าง วิธีนี้จะช่วยป้องกันไม่ให้มีการใช้ออบเจ็กต์ต้นทางเดียวกันสําหรับเป้าหมายอื่น บิลด์แรกจะเขียนลงในแผนผังแหล่งที่มา โดยแก้ไขแผนผังต้นทางสําหรับเป้าหมาย A จากนั้นการพยายามสร้างเป้าหมาย B อาจล้มเหลว
การแก้ปัญหาบิลด์ที่ไม่ใช่แบบส่วนบุคคล
เมื่อเริ่มการเรียกใช้ในเครื่อง ปัญหาที่ส่งผลกระทบต่อ Hit แคชในเครื่องจะแสดงการดําเนินการที่ไม่ได้ส่งผลต่อผู้ใช้
- ตรวจสอบว่ามีบิลด์ตามลําดับที่เป็นค่าว่าง: หากคุณเรียกใช้
make
และรับบิลด์ที่ประสบความสําเร็จ การเรียกใช้บิลด์อีกครั้งไม่ควรสร้างเป้าหมายใดๆ อีกครั้ง หากคุณเรียกใช้แต่ละเวอร์ชันของบิลด์ 2 ครั้งหรือในระบบที่แตกต่างกัน ให้เปรียบเทียบแฮชของเนื้อหาของผลลัพธ์และรับผลลัพธ์ที่แตกต่างกัน บิลด์นี้จะทําซ้ําไม่ได้ - เรียกใช้ขั้นตอนเพื่อแก้ไขข้อบกพร่องของ Hit แคชในเครื่องจากเครื่องไคลเอ็นต์ที่เป็นไปได้หลายเครื่อง เพื่อให้แน่ใจว่าคุณตรวจพบสภาพแวดล้อมไคลเอ็นต์ที่รั่วไหลจากการดําเนินการ
- เรียกใช้บิลด์ภายในคอนเทนเนอร์ Docker ที่ไม่มีอะไรนอกจากแผนผังแหล่งที่มาที่ชําระเงินและรายการเครื่องมือของโฮสต์ที่ชัดเจน สร้างความเสียหายและข้อความแสดงข้อผิดพลาด จะตรวจจับทรัพยากร Dependency ของระบบโดยนัย
- ค้นพบและแก้ไขปัญหาด้านความลึกลับโดยใช้กฎการดําเนินการระยะไกล
- เปิดใช้แซนด์บ็อกซ์ที่เข้มงวดในระดับการดําเนินการ เนื่องจากการดําเนินการในบิลด์จะเป็นแบบเก็บสถานะและส่งผลต่อบิลด์หรือเอาต์พุต
- กฎ Workspace
ช่วยให้นักพัฒนาซอฟต์แวร์เพิ่มทรัพยากร Dependency ไปยังพื้นที่ทํางานภายนอกได้ แต่มีจํานวนทรัพยากรเพียงพอที่จะทําให้การประมวลผลแบบอิสระเกิดขึ้นในกระบวนการได้ คุณรับบันทึกการดําเนินการที่อาจเป็นปัญหาที่อาจเกิดขึ้นไม่ได้ในกฎของพื้นที่ทํางาน Bazel ได้โดยเพิ่มแฟล็ก
--experimental_workspace_rules_log_file=PATH
ในคําสั่ง Bazel
ลึกลับกับบาเซล
ดูข้อมูลเพิ่มเติมเกี่ยวกับโปรเจ็กต์อื่นๆ ที่ประสบความสําเร็จโดยใช้งานสร้างที่ดูเป็นธีมกับ Bazel ได้ที่บทความ BazelCon ต่อไปนี้
- การสร้างระบบแบบเรียลไทม์ด้วย Bazel (SpaceX)
- การดําเนินการระยะไกลของ Bazel และการแคชระยะไกล (Uber และ TwoSigma)
- สร้างได้เร็วขึ้นด้วยการเรียกใช้ระยะไกลและการแคช
- วิธีใช้งาน Bazel: บิลด์ที่เพิ่มขึ้นอย่างรวดเร็ว
- การดําเนินการระยะไกลเทียบกับการเรียกใช้ภายใน
- การปรับปรุงความสามารถในการแคชจากระยะไกล (IBM)
- การสร้างรถยนต์ขับเคลื่อนด้วยตนเองด้วย Bazel (BMW)
- การสร้างรถยนต์ขับเคลื่อนด้วยตนเองด้วย Bazel + ถามและตอบ (การล่องเรือ GM)