หน้านี้จะอธิบายว่าระบบบิลด์คืออะไร ระบบบิลด์ทำอะไร เหตุผลที่คุณควรใช้ระบบบิลด์ และเหตุผลที่คอมไพเลอร์และสคริปต์บิลด์ไม่ใช่ตัวเลือกที่ดีที่สุดเมื่อองค์กรของคุณเริ่มขยายขนาด โดยมีไว้สำหรับนักพัฒนาแอปที่ไม่มีประสบการณ์มากนัก เกี่ยวกับระบบบิลด์
ระบบบิลด์คืออะไร
โดยพื้นฐานแล้ว ระบบบิลด์ทั้งหมดมีจุดประสงค์ที่ตรงไปตรงมา นั่นคือการแปลง ซอร์สโค้ดที่วิศวกรเขียนให้เป็นไบนารีที่เรียกใช้งานได้ซึ่งเครื่องอ่านได้ ระบบบิลด์ไม่ได้มีไว้สำหรับโค้ดที่เขียนโดยมนุษย์เท่านั้น แต่ยังช่วยให้ เครื่องสร้างบิลด์โดยอัตโนมัติได้ด้วย ไม่ว่าจะเป็นสำหรับการทดสอบหรือสำหรับการเผยแพร่ไปยัง การใช้งานจริง ในองค์กรที่มีวิศวกรหลายพันคน การสร้างส่วนใหญ่จะทริกเกอร์โดยอัตโนมัติแทนที่จะเป็นวิศวกรโดยตรง
ฉันใช้คอมไพเลอร์ไม่ได้เหรอ
ความจำเป็นของระบบบิลด์อาจไม่ชัดเจนในทันที วิศวกรส่วนใหญ่
ไม่ได้ใช้ระบบบิลด์ขณะเรียนรู้การเขียนโค้ด โดยส่วนใหญ่จะเริ่มด้วยการเรียกใช้เครื่องมือ
อย่าง gcc
หรือ javac
โดยตรงจากบรรทัดคำสั่ง หรือเทียบเท่าใน
สภาพแวดล้อมในการพัฒนาซอฟต์แวร์แบบอินเทอร์แอกทีฟ (IDE) ตราบใดที่ซอร์สโค้ดทั้งหมดอยู่ในไดเรกทอรีเดียวกัน คำสั่งเช่นนี้จะทำงานได้ดี
javac *.java
ซึ่งจะสั่งให้คอมไพเลอร์ Java นำไฟล์ต้นฉบับ Java ทุกไฟล์ในไดเรกทอรีปัจจุบัน และเปลี่ยนเป็นไฟล์คลาสไบนารี ในกรณีที่ง่ายที่สุด คุณเพียงแค่ต้องทำดังนี้
แต่ทันทีที่โค้ดขยายออกไป ความซับซ้อนก็เริ่มขึ้น javac
มีความสามารถ
มากพอที่จะค้นหาโค้ดในไดเรกทอรีย่อยของไดเรกทอรีปัจจุบันเพื่อ
นำเข้า แต่จะไม่มีวิธีค้นหาโค้ดที่จัดเก็บไว้ในส่วนอื่นๆ ของ
ระบบไฟล์ (อาจเป็นไลบรารีที่แชร์โดยหลายโปรเจ็กต์) และยังรู้วิธีสร้างโค้ด Java เท่านั้น
ระบบขนาดใหญ่มักประกอบด้วยชิ้นส่วนต่างๆ ที่เขียนด้วย
ภาษาโปรแกรมที่หลากหลาย โดยมีเว็บของ Dependency ระหว่างชิ้นส่วนเหล่านั้น
ซึ่งหมายความว่าคอมไพเลอร์สำหรับภาษาเดียวไม่สามารถสร้างทั้งระบบได้
เมื่อต้องจัดการกับโค้ดจากหลายภาษาหรือหน่วยการคอมไพล์หลายหน่วย การสร้างโค้ดจะไม่ใช่กระบวนการแบบขั้นตอนเดียวอีกต่อไป ตอนนี้คุณต้องประเมินว่าโค้ดของคุณขึ้นอยู่กับอะไร และสร้างชิ้นส่วนเหล่านั้นตามลำดับที่เหมาะสม โดยอาจใช้ชุดเครื่องมือที่แตกต่างกันสำหรับแต่ละชิ้นส่วน หากมีการเปลี่ยนแปลงการขึ้นต่อกัน คุณต้อง ทำกระบวนการนี้ซ้ำเพื่อหลีกเลี่ยงการขึ้นอยู่กับไบนารีที่ล้าสมัย สำหรับโค้ดเบสที่มีขนาดปานกลางขึ้นไป กระบวนการนี้จะกลายเป็นกระบวนการที่น่าเบื่อและมีข้อผิดพลาดได้ง่าย
คอมไพเลอร์ยังไม่ทราบวิธีจัดการกับทรัพยากรภายนอก
เช่น ไฟล์ JAR
ของบุคคลที่สามใน Java หากไม่มีระบบบิลด์
คุณจะจัดการได้โดยดาวน์โหลดทรัพยากร Dependency จากอินเทอร์เน็ต
วางไว้ในโฟลเดอร์ lib
ในฮาร์ดไดรฟ์ และกำหนดค่าคอมไพเลอร์ให้อ่าน
ไลบรารีจากไดเรกทอรีนั้น เมื่อเวลาผ่านไป การดูแลรักษา
การอัปเดต เวอร์ชัน และแหล่งที่มาของทรัพยากรภายนอกเหล่านี้จะทำได้ยาก
แล้วสคริปต์ของ Shell ล่ะ
สมมติว่าโปรเจ็กต์งานอดิเรกของคุณเริ่มต้นอย่างเรียบง่ายจนคุณสร้างได้ โดยใช้เพียงคอมไพเลอร์ แต่คุณเริ่มพบปัญหาบางอย่างที่อธิบายไว้ ก่อนหน้านี้ คุณอาจยังคิดว่าไม่จำเป็นต้องมีระบบบิลด์และสามารถทำให้ส่วนที่น่าเบื่อเป็นอัตโนมัติได้ โดยใช้สคริปต์เชลล์อย่างง่ายที่ดูแล การบิลด์สิ่งต่างๆ ตามลำดับที่ถูกต้อง วิธีนี้ช่วยได้ในระยะหนึ่ง แต่ในไม่ช้าคุณก็จะเริ่มเจอปัญหามากขึ้น
ซึ่งอาจทำให้เบื่อหน่ายได้ เมื่อระบบมีความซับซ้อนมากขึ้น คุณจะเริ่มใช้เวลาในการทำงานกับสคริปต์บิลด์เกือบเท่ากับเวลาที่ใช้กับโค้ดจริง การแก้ไขข้อบกพร่องของสคริปต์เชลล์เป็นเรื่องที่น่าปวดหัว เนื่องจากมีการแฮ็กมากขึ้นเรื่อยๆ ซ้อนทับกัน
ช้า เพื่อให้แน่ใจว่าคุณไม่ได้ใช้ไลบรารีที่ล้าสมัยโดยไม่ตั้งใจ คุณต้องให้สคริปต์บิลด์สร้างทรัพยากร Dependency ทุกรายการตามลำดับทุกครั้งที่คุณ เรียกใช้ คุณอาจคิดที่จะเพิ่มตรรกะบางอย่างเพื่อตรวจหาว่าส่วนใดที่ต้องสร้างใหม่ แต่การทำเช่นนั้นอาจทำให้สคริปต์มีความซับซ้อนและเกิดข้อผิดพลาดได้ง่าย หรือคุณอาจคิดถึงการระบุส่วนที่ต้องสร้างใหม่ทุกครั้ง แต่สุดท้ายก็ต้องกลับไปเริ่มต้นใหม่
ข่าวดี: ถึงเวลาเปิดตัวแล้ว คุณควรหาอาร์กิวเมนต์ทั้งหมด ที่คุณต้องส่งไปยังคำสั่ง jar เพื่อทำการบิลด์ขั้นสุดท้าย และอย่าลืม วิธีอัปโหลดและพุชไปยังที่เก็บส่วนกลาง รวมถึงสร้างและ พุชการอัปเดตเอกสารประกอบ และส่งการแจ้งเตือนไปยังผู้ใช้ อืม บางทีเราอาจต้องใช้สคริปต์อื่น...
แย่แล้ว ฮาร์ดไดรฟ์ขัดข้อง และตอนนี้คุณต้องสร้างระบบทั้งหมดขึ้นมาใหม่ คุณฉลาดพอที่จะเก็บไฟล์ต้นฉบับทั้งหมดไว้ในระบบควบคุมเวอร์ชัน แต่ไลบรารีที่คุณดาวน์โหลดล่ะ คุณค้นหาไฟล์ทั้งหมดอีกครั้งและตรวจสอบว่าไฟล์เป็นเวอร์ชันเดียวกันกับตอนที่คุณดาวน์โหลดครั้งแรกได้ไหม สคริปต์ของคุณอาจขึ้นอยู่กับเครื่องมือบางอย่างที่ ติดตั้งไว้ในตำแหน่งที่เฉพาะเจาะจง คุณสามารถกู้คืนสภาพแวดล้อมเดิมเพื่อให้ สคริปต์ทำงานได้อีกครั้งไหม แล้วตัวแปรสภาพแวดล้อมทั้งหมดที่คุณตั้งค่าไว้นานมาแล้วเพื่อให้คอมไพเลอร์ทำงานได้อย่างถูกต้องและลืมไปแล้วล่ะ
แม้จะมีปัญหา แต่โปรเจ็กต์ของคุณก็ประสบความสำเร็จมากพอที่จะ เริ่มจ้างวิศวกรเพิ่มเติมได้ ตอนนี้คุณคงทราบแล้วว่าไม่จำเป็นต้องรอให้เกิดภัยพิบัติ ปัญหาเดิมๆ ก็จะเกิดขึ้นได้ คุณต้องผ่านกระบวนการ การเริ่มต้นที่แสนเจ็บปวดแบบเดิมทุกครั้งที่มีนักพัฒนาซอฟต์แวร์ใหม่เข้าร่วมทีม และแม้ว่าคุณจะพยายามอย่างเต็มที่ แต่ระบบของแต่ละคนก็ยังคงมีความแตกต่างกันเล็กน้อย บ่อยครั้งที่สิ่งที่ใช้ได้ในเครื่องของคนหนึ่งอาจใช้ไม่ได้ในเครื่องของอีกคนหนึ่ง และทุกครั้งที่เกิดปัญหานี้จะต้องใช้เวลา 2-3 ชั่วโมงในการแก้ไขข้อบกพร่องของเส้นทางเครื่องมือหรือเวอร์ชันไลบรารีเพื่อหาว่าความแตกต่างอยู่ตรงไหน
คุณตัดสินใจว่าต้องทำให้ระบบบิลด์เป็นแบบอัตโนมัติ ในทางทฤษฎีแล้ว การดำเนินการนี้ทำได้ง่ายๆ เพียงแค่ซื้อคอมพิวเตอร์เครื่องใหม่และตั้งค่าให้เรียกใช้สคริปต์บิลด์ทุกคืนโดยใช้ Cron คุณยังคงต้องผ่านกระบวนการตั้งค่าที่น่าเบื่อ แต่ตอนนี้คุณจะไม่มีประโยชน์จากสมองของมนุษย์ที่สามารถตรวจจับและแก้ไขปัญหาเล็กๆ น้อยๆ ได้ ทุกเช้าเมื่อคุณเข้ามาทำงาน คุณจะเห็นว่าการสร้างเมื่อคืนล้มเหลวเนื่องจากเมื่อวานนี้ นักพัฒนาซอฟต์แวร์ได้ทำการเปลี่ยนแปลงที่ใช้ได้ในระบบของตนเอง แต่ใช้ไม่ได้ในระบบการสร้างอัตโนมัติ แต่ละครั้งก็เป็นการแก้ไขง่ายๆ แต่เกิดขึ้นบ่อยมากจนคุณต้องเสียเวลาไปกับการค้นหาและใช้การแก้ไขง่ายๆ เหล่านี้ในแต่ละวัน
การสร้างจะช้าลงเรื่อยๆ เมื่อโปรเจ็กต์มีขนาดใหญ่ขึ้น วันหนึ่งขณะรอให้การสร้างเสร็จสมบูรณ์ คุณมองไปยังเดสก์ท็อปที่ไม่ได้ใช้งานของเพื่อนร่วมงานที่กำลังพักร้อนด้วยความเศร้าใจ และหวังว่าจะมีวิธีใช้ประโยชน์จากพลังการประมวลผลที่สูญเปล่าทั้งหมดนั้น
คุณพบปัญหาคลาสสิกเกี่ยวกับการปรับขนาด สำหรับนักพัฒนาซอฟต์แวร์คนเดียวที่ทำงานกับโค้ดไม่กี่ร้อยบรรทัดเป็นเวลาไม่เกิน 1-2 สัปดาห์ (ซึ่งอาจเป็นประสบการณ์ทั้งหมดของนักพัฒนาซอฟต์แวร์รุ่นเยาว์ที่เพิ่งจบการศึกษาจากมหาวิทยาลัย) คอมไพเลอร์คือสิ่งที่คุณต้องการ สคริปต์อาจช่วยให้คุณไปได้ไกลขึ้นอีกเล็กน้อย แต่ทันทีที่คุณต้องประสานงานกับนักพัฒนาซอฟต์แวร์หลายคนและเครื่องของนักพัฒนาซอฟต์แวร์เหล่านั้น แม้แต่สคริปต์การสร้างที่สมบูรณ์แบบก็ไม่เพียงพอ เพราะการพิจารณาความแตกต่างเล็กๆ น้อยๆ ในเครื่องเหล่านั้นจะกลายเป็นเรื่องยากมาก เมื่อถึงจุดนี้ แนวทางที่เรียบง่ายนี้จะใช้ไม่ได้แล้ว และถึงเวลาที่จะลงทุนในระบบบิลด์ที่แท้จริง