สิ่งมีชีวิต

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

หน้านี้ครอบคลุมเรื่องลึกลับ ประโยชน์ของการใช้บิวด์เชิงมีกลยุทธ์ และกลยุทธ์สําหรับการระบุพฤติกรรมที่ไม่ใช่อารมณ์ทางเพศในบิลด์ของคุณ

ภาพรวม

หากได้รับซอร์สโค้ดอินพุตและการกําหนดค่าผลิตภัณฑ์เดียวกัน ระบบบิวด์แบบมีมธุรินจะแสดงผลเอาต์พุตเดียวกันเสมอโดยแยกบิลด์จากการเปลี่ยนแปลงไปยังระบบโฮสต์

ในการแยกบิลด์ บิลด์ที่สมุนไพรจะไม่คํานึงถึงไลบรารีและซอฟต์แวร์อื่นๆ ที่ติดตั้งในเครื่องโฮสต์ในเครื่องหรือระยะไกล โดยขึ้นอยู่กับเวอร์ชันบิลด์ของเครื่องมือสร้าง เช่น คอมไพเลอร์ และทรัพยากร 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 ต่อไปนี้