“ Build Server” คืออะไร? [ปิด]


101

ฉันไม่ได้ทำงานในองค์กรขนาดใหญ่มากและฉันไม่เคยทำงานให้กับ บริษัท ที่มี "Build Server"

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

ที่เดียวที่ฉันเห็นว่า Build Server มีประโยชน์คือสำหรับการรวมอย่างต่อเนื่องกับเซิร์ฟเวอร์ build ที่สร้างสิ่งที่มุ่งมั่นกับที่เก็บอย่างต่อเนื่อง ฉันไม่ได้ทำงานในโครงการที่ใหญ่พอหรือไม่?

ใครบางคนโปรดให้ความรู้ฉัน: จุดประสงค์ของการสร้างเซิร์ฟเวอร์คืออะไร?

คำตอบ:


94

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

Joel Spolsky ในเรื่องนี้


7
สิ่งต่าง ๆ จะยุ่งยากเป็นพิเศษเมื่อนักพัฒนาสร้างขึ้นเพื่อต่อต้านไลบรารีที่มีเลือดออกโดยไม่รู้ตัวและได้รับข้อผิดพลาด "NoClassDefFound" ทั่วทุกที่ในระหว่างการทดสอบและทุกคนก็สงสัยว่าเกิดอะไรขึ้น (นี่เป็นปัญหาในงานที่ใช้ Java ของฉันจนกว่าฉันจะตั้งค่า Hudson และเราย้าย QA builds ไปที่)
MattC

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

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

48

บิลด์เซิร์ฟเวอร์มีความสำคัญด้วยเหตุผลหลายประการ

  • พวกเขาแยกสภาพแวดล้อมออกผู้พัฒนา Code Monkeyในพื้นที่กล่าวว่า "มันคอมไพล์ในเครื่องของฉัน " เมื่อมันไม่ได้รวบรวมบนเครื่องของคุณ ซึ่งอาจหมายถึงการเช็คอินแบบไม่ซิงค์หรืออาจหมายถึงไลบรารีที่อ้างอิงขาดหายไป นรกโอ่งไม่ได้อยู่ใกล้เลวร้ายเท่ากับ. dll hell; ไม่ว่าจะด้วยวิธีใดก็ตามการใช้บิลด์เซิร์ฟเวอร์เป็นการประกันราคาถูกที่บิลด์ของคุณจะไม่ล้มเหลวอย่างลึกลับหรือจัดแพ็กเกจไลบรารีที่ไม่ถูกต้องโดยไม่ได้ตั้งใจ

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

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


12
+1 การให้โปรแกรมเมอร์บันทึกการเปลี่ยนแปลงสภาพแวดล้อมการสร้างก็เหมือนกับการต้อนแมว พวกเขาจำไม่ได้ว่าพวกเขาอัปเดต. Net หรือ Boost lib ในขั้นตอนใดหากพวกเขารู้ว่าพวกเขาทำมันเลย การมีเซิร์ฟเวอร์กลางที่สร้างบิวด์รายวันจะจับพวกเขาได้ในตอนเย็นหลังจากที่พวกเขาเช็คอินโค้ดและไม่มีอะไรที่จูงใจได้มากเท่ากับที่มีคนบอกว่า "คุณสร้างทีมพังคุณลืมอะไรไป"
kmarsh

28

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

เหตุใดนักพัฒนาจึงไม่สร้างโครงการบนเครื่องในพื้นที่ของตนหรือ?
เนื่องจากซอฟต์แวร์ที่ซับซ้อนมีหลายสิ่งหลายอย่างที่อาจผิดพลาดได้เมื่อ "รวบรวมผ่าน" ปัญหาที่ฉันพบจริง:

  • การตรวจสอบการพึ่งพาประเภทต่างๆไม่สมบูรณ์ส่งผลให้ไบนารีไม่ได้รับการอัปเดต
  • เผยแพร่คำสั่งล้มเหลวโดยไม่โต้ตอบข้อความแสดงข้อผิดพลาดในบันทึกถูกละเว้น
  • สร้างรวมถึงแหล่งที่มาในพื้นที่ที่ยังไม่ได้มุ่งมั่นในการควบคุมแหล่งที่มา (โชคดีที่ยังไม่มีกล่องข้อความ "ลูกค้าด่า" .. )
  • เมื่อพยายามหลีกเลี่ยงปัญหาข้างต้นโดยสร้างจากโฟลเดอร์อื่นไฟล์บางไฟล์เลือกมาจากโฟลเดอร์ที่ไม่ถูกต้อง
  • โฟลเดอร์เป้าหมายที่ไบนารีถูกรวมมีไฟล์นักพัฒนาเก่าเพิ่มเติมที่ไม่รวม shoulkd ในรีลีส

เรามีเสถียรภาพที่เพิ่มขึ้นอย่างน่าทึ่งเนื่องจากการเผยแพร่สาธารณะทั้งหมดเริ่มต้นด้วยการได้รับจากการควบคุมแหล่งที่มาไปยังโฟลเดอร์ว่างเปล่า ก่อนหน้านี้มี "ปัญหาตลก ๆ " มากมายที่ "หายไปเมื่อโจให้ DLL ใหม่แก่ฉัน"

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

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

ฉันไม่ได้ทำงานในโครงการที่ใหญ่พอหรือไม่?

ขนาดเป็นปัจจัยหนึ่งอย่างแน่นอน แต่ไม่ใช่เพียงปัจจัยเดียว


8

บิลด์เซิร์ฟเวอร์เป็นแนวคิดที่แตกต่างไปจากเซิร์ฟเวอร์การรวมแบบต่อเนื่อง มีเซิร์ฟเวอร์ CI เพื่อสร้างโครงการของคุณเมื่อมีการเปลี่ยนแปลง ในทางตรงกันข้ามเซิร์ฟเวอร์ Build มีอยู่เพื่อสร้างโครงการ (โดยทั่วไปคือรีลีสเทียบกับการแก้ไขที่ติดแท็ก) บนสภาพแวดล้อมที่สะอาด ช่วยให้มั่นใจได้ว่าไม่มีการแฮ็กของนักพัฒนาการปรับแต่งเวอร์ชัน config / artifact ที่ไม่ได้รับการอนุมัติหรือโค้ดที่ไม่ได้ผูกมัดทำให้เป็นโค้ดที่ออก


คำตอบที่ดี โหวตชื่อด้วย
Philip Schiff

6

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


5

หากต้องการเพิ่มสิ่งที่ได้กล่าวไปแล้ว:

อดีตเพื่อนร่วมงานคนหนึ่งทำงานในทีม Microsoft Office และบอกว่าการสร้างที่สมบูรณ์บางครั้งใช้เวลา 9 ชั่วโมง นั่นจะดูดไปทำบนเครื่องของคุณได้ไหม?


4

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


4

ฉันเห็นด้วยกับคำตอบที่ผ่านมาเกี่ยวกับความเสถียรความสามารถในการตรวจสอบย้อนกลับและความสามารถในการทำซ้ำ ('ity เยอะใช่มั้ย?) จากที่เคยทำงานให้กับ บริษัท ขนาดใหญ่เท่านั้น (การดูแลสุขภาพการเงิน) กับเซิร์ฟเวอร์จำนวนมากที่สร้างขึ้นฉันขอเสริมว่ามันเกี่ยวกับความปลอดภัยด้วย เคยดูภาพยนตร์เรื่อง Office Space หรือไม่? หากนักพัฒนาที่ไม่พอใจสร้างแอปพลิเคชันธนาคารบนเครื่องในพื้นที่ของเขาและไม่มีใครดูหรือทดสอบ ... บูม ซูเปอร์แมน III


@Greg อย่างแน่นอน! ทุกคนที่นี่ดูเหมือนจะพลาดส่วนนั้นไป ตอนนี้ฉันกำลังดำเนินการเกี่ยวกับกระบวนการควบคุมการเปลี่ยนแปลงสำหรับการปฏิบัติตามข้อกำหนดที่ต้องใช้แผนกรองในการผลิต ถ้าคุณไม่ต้องการสอนไอทีเกี่ยวกับการใช้ Visual Studio และปรับใช้ yada yada yada ... สิ่งนี้ช่วยให้คุณสามารถทำได้ด้วยการคลิกอย่างรวดเร็วไม่แน่ใจว่าวิธีนี้ถือว่า "ไร้ประโยชน์" อย่างที่บางคนกล่าวไว้
gcoleman0828

3

เครื่องจักรเหล่านี้ถูกนำมาใช้ด้วยเหตุผลหลายประการโดยทั้งหมดพยายามช่วยคุณจัดหาผลิตภัณฑ์ที่เหนือกว่า

การใช้งานอย่างหนึ่งคือการจำลองการกำหนดค่าของผู้ใช้ทั่วไป ผลิตภัณฑ์อาจทำงานบนคอมพิวเตอร์ของคุณโดยมีการตั้งค่าเครื่องมือและไลบรารีการพัฒนาทั้งหมดของคุณ แต่ผู้ใช้ส่วนใหญ่มักจะไม่มีการกำหนดค่าเหมือนกับคุณ สำหรับเรื่องนั้นนักพัฒนารายอื่นจะไม่มีการตั้งค่าเหมือนกับคุณ หากคุณมีพา ธ แบบฮาร์ดโค้ดอยู่ที่ไหนสักแห่งในโค้ดของคุณมันอาจจะใช้งานได้บนเครื่องของคุณ แต่เมื่อ Dev El O'per พยายามสร้างโค้ดเดียวกันมันจะไม่ทำงาน

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


2

เพื่อคุณภาพที่สม่ำเสมอและเพื่อให้บิวด์ 'ปิดเครื่องของคุณ' เพื่อตรวจหาข้อผิดพลาดของสภาพแวดล้อมและเพื่อให้ไฟล์ใด ๆ ที่คุณลืมเช็คอินในการควบคุมแหล่งที่มาจะแสดงเป็นข้อผิดพลาดในการสร้าง

ฉันยังใช้มันเพื่อสร้างตัวติดตั้งเนื่องจากสิ่งเหล่านี้ใช้เวลามากในการทำบนเดสก์ท็อปด้วยการเซ็นรหัสเป็นต้น


1

เราใช้อย่างใดอย่างหนึ่งเพื่อให้เราทราบว่ากล่องการผลิต / ทดสอบมีไลบรารีและเวอร์ชันเดียวกันของไลบรารีเหล่านั้นที่ติดตั้งกับสิ่งที่มีอยู่ในบิลด์เซิร์ฟเวอร์


1

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


1

คุณคิดถูกแล้วที่นักพัฒนาสามารถสร้างบนเครื่องของตัวเองได้

แต่นี่คือบางสิ่งที่เซิร์ฟเวอร์บิวด์ของเราซื้อให้เราและเราแทบจะไม่ซับซ้อนในการสร้างบิลด์:

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

1

บางทีฉันอาจเป็นคนเดียว ...

ฉันคิดว่าทุกคนเห็นด้วยว่าควร

  • ใช้ที่เก็บไฟล์
  • สร้างจากที่เก็บ (และในสภาพแวดล้อมที่สะอาด)
  • ใช้เซิร์ฟเวอร์ทดสอบอย่างต่อเนื่อง (เช่นระบบควบคุมความเร็วคงที่) เพื่อดูว่ามีอะไรเสียหรือไม่หลังจาก "การแก้ไข" ของคุณ

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

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

ดังนั้น "เซิร์ฟเวอร์สร้าง" อาจเป็นเพียงการเรียกชื่อผิดและเป็น "เซิร์ฟเวอร์ทดสอบต่อเนื่อง" มิฉะนั้นจะฟังดูไร้ประโยชน์มาก


0

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


0

นอกจากนี้โปรดจำไว้ว่าภาษาระดับต่ำใช้เวลาในการรวบรวมนานกว่าภาษาระดับสูงมาก คิดง่ายๆว่า "ดูดีโปรเจ็กต์. Net ของฉันรวบรวมได้ในไม่กี่วินาที! เรื่องใหญ่อะไร?" ในขณะที่ฉันต้องยุ่งกับรหัส C และฉันลืมไปว่าต้องใช้เวลาในการรวบรวมนานแค่ไหน


IMHO นั่นไม่ได้เกี่ยวกับภาษาระดับต่ำกับภาษาระดับสูงมากนัก แต่เกี่ยวกับระบบโมดูลที่เสีย / ไม่มีอยู่จริงของ C (เช่นรวมไฟล์) กับภาษาที่มีระบบโมดูลที่ใช้งานได้
Elmar Zander

0

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


0

เซิร์ฟเวอร์บิวด์ยังช่วยให้คุณมีพื้นฐานสำหรับเอสโครว์ด้วยความสามารถในการจับชิ้นส่วนทั้งหมดที่จำเป็นในการสร้างบิวด์ในกรณีที่ผู้อื่นอาจมีสิทธิ์ในการเป็นเจ้าของ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.