เครื่องมือสร้างคืออะไร?


130

4 ปีที่ผ่านมาฉันเขียนโปรแกรมด้วย Eclipse (สำหรับ Java) และ Visual Studio Express (สำหรับ C #) IDE ที่กล่าวถึงดูเหมือนจะให้ทุกสิ่งอำนวยความสะดวกที่โปรแกรมเมอร์อาจขอ (แน่นอนว่าเกี่ยวข้องกับการเขียนโปรแกรม)

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

คำตอบ:


117

เครื่องมือสร้างคืออะไร?

Build tools คือโปรแกรมที่สร้างแอพพลิเคชั่นที่เรียกใช้งานได้โดยอัตโนมัติจากซอร์สโค้ด (เช่น. apk สำหรับแอพ android) อาคารประกอบด้วยการรวบรวมการเชื่อมโยงและการบรรจุรหัสลงในรูปแบบที่ใช้งานได้หรือปฏิบัติการได้

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

  1. กำลังดาวน์โหลดการอ้างอิง
  2. การรวบรวมซอร์สโค้ดเป็นรหัสไบนารี
  3. บรรจุรหัสไบนารีนั้น
  4. กำลังดำเนินการทดสอบ
  5. การปรับใช้กับระบบการผลิต

เหตุใดเราจึงใช้เครื่องมือสร้างหรือสร้างระบบอัตโนมัติ

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

มีเครื่องมือสร้างมากมาย (ตั้งชื่อเพียงไม่กี่ตัว):

  1. สำหรับ java - Ant, Maven, Gradle
  2. สำหรับ. NET framework - NAnt
  3. c # - MsBuild

สำหรับการอ่านเพิ่มเติมคุณสามารถอ้างอิงลิงค์ต่อไปนี้:

1. สร้างระบบอัตโนมัติ

2. รายชื่อซอฟต์แวร์สร้างอัตโนมัติ

ขอบคุณ


17

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

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

อย่างที่คนอื่น ๆ บอกคุณเคยใช้ แต่คุณไม่จำเป็นต้องพิจารณาเพราะคุณอาจทำงานในลักษณะที่แตกต่างจากวิธีการทำงานเชิงพาณิชย์ตามปกติ


10

เครื่องมือสร้างมักจะทำงานบนบรรทัดคำสั่งไม่ว่าจะอยู่ใน IDE หรือแยกออกจากกันโดยสิ้นเชิง

แนวคิดคือการแยกงานรวบรวมและบรรจุรหัสของคุณออกจากการสร้างการดีบักและอื่น ๆ

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

make เป็นเครื่องมือคำสั่งยุคแรกที่ใช้ในสภาพแวดล้อม * nix สำหรับการสร้าง C / C ++

ในฐานะนักพัฒนา Java เครื่องมือสร้างยอดนิยมคือ Ant และ Maven ทั้งสองสามารถเรียกใช้ใน IDE เช่น IntelliJ หรือ Eclipse หรือ NetBeans นอกจากนี้ยังสามารถใช้โดยเครื่องมือผสานรวมอย่างต่อเนื่องเช่น Cruise Control หรือ Hudson


6
ตอนนี้ Gradle ยังใช้กันอย่างแพร่หลาย
asura

ไม่ได้มาจากที่ฉันนั่ง ฉันไม่รู้จัก Gradle ดังนั้นขอขอบคุณสำหรับข้อมูลอ้างอิง
duffymo

@duffymo คุณช่วยอธิบายในบรรทัดสุดท้ายได้ไหม การบูรณาการแบบต่อเนื่องคืออะไร? เกี่ยวข้องกับเครื่องมือสร้างอย่างไร?
Quazi Irfan

4

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

นอกจากนี้ Eclipse หรือ Visual Studio ยังเป็นระบบบิลด์ (แต่มี IDE มากกว่า) และสำหรับวิชวลสตูดิโอนั้นเป็น msbuild ในการแยกวิเคราะห์ไฟล์โปรเจ็กต์วิชวลสตูดิโอภายใต้ประทุน

ต้นกำเนิดของระบบสร้างทั้งหมดดูเหมือนว่า 'make' ที่มีชื่อเสียง

มีระบบสร้างสำหรับภาษาต่างๆ:

  1. C ++: make, cmake, premake
  2. Java: ant + ivy, maven, gradle
  3. C #: msbuild

โดยปกติสร้างระบบโดยใช้ภาษาเฉพาะโดเมนที่เหมาะสม (make, cmake) หรือ xml (ant, maven, msbuild) เพื่อระบุบิลด์ แนวโน้มปัจจุบันคือการใช้ภาษาสคริปต์จริงในการเขียนบิลด์สคริปต์เช่น lua for premake และ groovy สำหรับ gradle ข้อดีของการใช้สคริปต์คือมีความยืดหยุ่นมากขึ้นและยังช่วยให้คุณสามารถสร้างชุดมาตรฐานได้อีกด้วย API (เป็น DSL บิลด์)


1

Build Process คือกระบวนการคอมไพล์ซอร์สโค้ดของคุณสำหรับข้อผิดพลาดใด ๆ โดยใช้เครื่องมือบิลด์และการสร้างบิลด์ (ซึ่งเป็นโปรเจ็กต์เวอร์ชันปฏิบัติการ) เรา (ผู้พัฒนาส่วนใหญ่) ทำการแก้ไขบางอย่างในซอร์สโค้ดและเช็คอินโค้ดนั้นเพื่อให้กระบวนการสร้างเกิดขึ้น หลังจากขั้นตอนการสร้างจะให้ผลลัพธ์สองอย่าง: 1. สร้าง PASSES และคุณจะได้รับเวอร์ชันปฏิบัติการของโครงการของคุณ (Build พร้อมแล้ว) 2. ล้มเหลวและคุณได้รับข้อผิดพลาดบางอย่างและไม่ได้สร้างบิลด์

กระบวนการสร้างมีหลายประเภทเช่น 1. Nightly Build 2. gated Build 3. Continuous Integration build เป็นต้น

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

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


คุณช่วยบอกข้อมูลเพิ่มเติมเกี่ยวกับบิวด์ Nightly, Gated และ Continuous Integration ได้ไหม
Quazi Irfan

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

1

นี่คือกระบวนการประเภทต่างๆที่คุณสามารถสร้างงานให้เสร็จได้

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

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

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

รายละเอียดเพิ่มเติมเกี่ยวกับงานสร้างเหล่านี้สามารถพบได้ที่ตำแหน่งด้านล่าง

ตรวจสอบรั้วในบิลด์

การสร้างการผสานรวมอย่างต่อเนื่อง

งานสร้างตอนกลางคืน


0

คุณได้ใช้มัน - IDE เป็นเครื่องมือสร้าง สำหรับบรรทัดคำสั่งคุณสามารถใช้สิ่งต่างๆเช่นmake.

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


11
โดยปกติ IDE ไม่ใช่เครื่องมือสร้าง แต่จะรวมเข้ากับ / เรียกเครื่องมือสร้าง ตัวอย่างเช่น Visual Studio normaly เรียก MSBuild
Justin

-1

"... มันยากมากที่จะติดตามสิ่งที่ต้องสร้าง" - Build tools ไม่ได้ช่วยในเรื่องนั้นทั้งหมด คุณต้องรู้ว่าคุณต้องการสร้างอะไร (อ้างจากคำตอบของ Ritesh Gun)

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

"ทำไมฉันไม่ต้องการพวกเขาเลยในสี่ปีที่ผ่านมา" อาจเป็นเพราะคุณเป็นโปรแกรมเมอร์ฝีมือดี

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

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

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

ไม่มีทางลัดอื่นใดนอกจากการคิดคิด

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

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

ขออภัยไม่มีทางลัด https://en.wikipedia.org/wiki/Scientific_method และ https://en.wikipedia.org/wiki/Analysis


คำตอบของคุณมีความเอนเอียงอย่างเหลือเชื่อจากมุมมอง C ซึ่งเป็นปัญหาใหญ่ เครื่องมือสร้างมีความจำเป็นสำหรับสิ่งที่ซับซ้อนมากกว่าการรันคอมไพเลอร์ (ถึงอย่างนั้น gcc ก็เป็น b-word ขนาดใหญ่) และการจัดการการพึ่งพาด้วยการประกาศการพึ่งพาที่เข้มงวดถือเป็นสิ่งที่มาจากสวรรค์ เพียงเพราะคุณไม่ใช้มันไม่ได้หมายความว่าสิ่งเหล่านี้เป็นแนวคิดที่ไม่ดี หากคุณใช้สคริปต์ทุบตีเพื่อสร้างสิ่งต่าง ๆ นั่นก็เป็นเครื่องมือในการสร้างเช่นกันไม่ใช่เครื่องมือที่ดีมาก หากคุณรวบรวมด้วยมือหรือผ่านทาง ide โดยเฉพาะพระเจ้าอาจอยู่กับคุณสำหรับงานสร้างที่ซับซ้อนและทำซ้ำได้ในระบบต่างๆ
RecursiveExceptionException
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.