ทำไมจึงต้องใช้ระบบการสร้าง

วันที่ รายงานปัญหา ดูแหล่งที่มา ตอนกลางคืน · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

ระบบการสร้างคืออะไร

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

ฉันใช้แค่คอมไพเลอร์ไม่ได้ใช่ไหม

ความจำเป็นในการใช้ระบบบิลด์อาจยังไม่ชัดเจนในทันที วิศวกรส่วนใหญ่ ไม่ใช้ระบบบิลด์ขณะเรียนรู้วิธีเขียนโค้ด ซึ่งส่วนใหญ่เริ่มจากการเรียกใช้เครื่องมือ เช่น gcc หรือ javac จากบรรทัดคำสั่งโดยตรง หรือค่าที่เทียบเท่าใน สภาพแวดล้อมในการพัฒนาซอฟต์แวร์แบบผสานรวม (IDE) ตราบใดที่ซอร์สโค้ดทั้งหมดอยู่ใน ไดเรกทอรีเดียวกัน คำสั่งแบบนี้ใช้ได้ดี

javac *.java

วิธีนี้จะสั่งให้คอมไพเลอร์ Java นำไฟล์ต้นฉบับ Java ทุกไฟล์ในไฟล์ปัจจุบัน แล้วเปลี่ยนเป็นไฟล์คลาสไบนารี สำหรับกรณีที่ง่ายที่สุด คือ เพียงเท่านี้ก็ได้ตามต้องการ

อย่างไรก็ตาม ทันทีที่โค้ดขยายออก ข้อมูลแทรกจะเริ่มต้นขึ้น javac ฉลาด ในไดเรกทอรีย่อยของไดเรกทอรีปัจจุบันเพื่อค้นหาโค้ดที่จะ นำเข้า แต่จะไม่มีวิธีการค้นหาโค้ดที่จัดเก็บไว้ในส่วนอื่นๆ ของ (อาจเป็นไลบรารีที่ใช้ร่วมกันโดยหลายโครงการ) และรู้แค่ว่า วิธีสร้างโค้ด Java ระบบขนาดใหญ่มักจะเกี่ยวข้องกับงานเขียนต่างๆ ภาษาโปรแกรมที่หลากหลายพร้อมด้วยเว็บของทรัพยากร Dependency ต่างๆ ในเรื่องเหล่านี้ หมายความว่าไม่มีคอมไพเลอร์สำหรับภาษาใดภาษาหนึ่งที่สามารถ สร้างทั้งระบบได้

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

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

แล้วสคริปต์ Shell ล่ะ

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

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

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

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

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

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

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

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

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