“ การสร้างอัตโนมัติ” หมายความว่าอย่างไร


15

ฉันกำลังพยายามเพิ่มการรวมอย่างต่อเนื่องในโครงการ

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

จุดเฉพาะของความสับสน: "การสร้างอัตโนมัติ" หมายถึงอะไรในบริบทของ:

  • โครงการที่ใช้ภาษาที่ตีความเช่น Python หรือ Perl
  • สร้างจากแหล่งที่มาบนเครื่องของผู้ใช้ปลายทาง?
  • แอปพลิเคชันที่มีการขึ้นต่อกันที่ไม่สามารถรวบรวมและแจกจ่ายได้ง่ายเช่นฐานข้อมูลใน RDBMS แบบโลคัลไปยังเครื่องของผู้ใช้หรือไม่?

2
ฉันติดแท็กด้วยทั้งคู่buildsและbuildเพราะฉันไม่รู้ว่าจะใช้อันไหน

คำตอบ:


14

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

  • กระบวนการสำหรับการแปลงแหล่งที่มาของสิ่งประดิษฐ์ (รหัส, สคีมาฐานข้อมูล, เอกสาร, ฯลฯ ) ที่ปรับใช้กับผู้ใช้ปลายทาง
  • การใช้มาตรการประกันคุณภาพในช่วงการเปลี่ยนแปลงดังกล่าว

การทำงานอัตโนมัตินั้นหมายถึงการทำให้การดำเนินการเหล่านั้นเป็นไปโดยอัตโนมัติ (นั่นคือไม่ต้องการการแทรกแซงด้วยตนเอง) ซึ่งอาจรวมถึงขั้นตอนที่หลากหลายขึ้นอยู่กับเทคโนโลยีของคุณ:

ขั้นตอนการเปลี่ยนแปลง:

  • การรวบรวม
  • การเชื่อมโยง
  • บรรจุภัณฑ์
  • การปรับใช้
  • การโยกย้ายข้อมูล
  • การสำรองข้อมูล
  • การแจ้งเตือน

ขั้นตอนการประกันคุณภาพ:

  • คำเตือน / ข้อผิดพลาดของคอมไพเลอร์
  • การทดสอบหน่วย
  • การทดสอบบูรณาการ
  • การทดสอบระบบ
  • การตรวจสอบการปรับใช้

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


21

บิลด์อัตโนมัติเป็นคำอธิบายของกระบวนการที่ควรครอบคลุมพื้นฐานต่อไปนี้:

  1. ดึงรหัสล่าสุดจากการควบคุมแหล่งที่มา
  2. รวบรวมรหัสล่าสุดลงในไฟล์ที่เรียกทำงานได้
  3. เรียกใช้การทดสอบ (การทดสอบหน่วยการทดสอบระบบการทดสอบการรวม) กับรหัสที่รวบรวม
  4. การปรับใช้เสร็จสิ้นการดำเนินการกับตำแหน่งที่ทราบสำหรับการปรับใช้
  5. เผยแพร่ผลลัพธ์ของการสร้าง
    5.1 การรวบรวมที่ประสบความสำเร็จการทดสอบหน่วยที่ประสบความสำเร็จ

มันเป็นกระบวนการแบบ hands-off ที่ควรรันโดยไม่มีการแทรกแซงด้วยตนเอง


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

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

2

ในใจของฉันการสร้างอัตโนมัติเป็นสิ่งที่

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

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

หากคุณมีภาษาที่ไม่ได้รวบรวมคุณยังสามารถสร้างเว็บไซต์และ zip เพื่อสร้างสิ่งประดิษฐ์เดียว

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

ฉันขอแนะนำให้รันการทดสอบการรวม / การถดถอยเป็นส่วนหนึ่งของกระบวนการปรับใช้แทนที่จะเป็นกระบวนการสร้าง (แม้ว่าคุณจะมีสภาพแวดล้อมที่สะดวกคุณสามารถปรับใช้กับทุกบิลด์)


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

@DavidThornley: ใช่ นั่นมีประโยชน์ เครื่องมือ CI ส่วนใหญ่อนุญาตให้คุณเริ่มงานสร้างนอกกำหนดเวลาของคุณ แต่อีกครั้งมันไม่ได้หยุดที่จะสร้างอัตโนมัติเพราะตัวเลือกนี้ไม่ได้มี มันจะหยุดการสร้างอัตโนมัติหากนักพัฒนามักจะเรียกมัน
สาธารณรัฐประชาธิปไตยประชาชนลาว

1
a project using an interpreted language, such as Python or Perl?

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

สร้างจากแหล่งที่มาบนเครื่องของผู้ใช้ปลายทาง?

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

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

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


1

สิ่งที่คุณกำลังพูดถึงในคำถามของคุณคือแนวคิดที่แตกต่างกัน 3 แนวคิด:

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

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

เพื่อลดสถานการณ์นี้เราใช้เทคนิคอื่นเพื่อลบค่าใช้จ่ายนี้

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

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


1
จุดที่ดี ... มันแย่มากที่คนส่วนใหญ่ไม่ได้อ่านลงไปที่ด้านล่างของกระทู้และโหวต
hotshot309

0

"การสร้างอัตโนมัติ" หมายความว่าคุณสามารถเปลี่ยนจากการควบคุมแหล่งที่มาไปยังแพคเกจ shippable ด้วยการกระทำหนึ่ง (ตามกำหนดเวลา) (โดยทั่วไปคือเชลล์สคริปต์หรือแบตช์ไฟล์)

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

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

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