CI สามารถใช้สำหรับภาษาที่ตีความได้อย่างไร


23

ฉันไม่เคยใช้ระบบการรวมต่อเนื่อง (CI) มาก่อน ฉันใช้รหัสเป็นหลักใน MATLAB, Python หรือ PHP ทั้งสองอย่างนี้มีขั้นตอนการสร้างและฉันไม่เห็นว่าจะใช้ CI สำหรับงานของฉันได้อย่างไร เพื่อนในโครงการขนาดใหญ่ใน บริษัท ขนาดใหญ่บอกฉันว่าภาษาไม่สำคัญ

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



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

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

คำตอบ:


32

การรวมกันอย่างต่อเนื่องเป็นคำที่อ้างถึงสองแนวคิดที่แตกต่าง

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

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

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

ปรากฎว่าเซิร์ฟเวอร์ดังกล่าวมีค่ามากกว่าการทดสอบ ในความเป็นจริงซอฟต์แวร์ CI ส่วนใหญ่มีความนิยมอย่างมากในการทดสอบในรูปแบบต่าง ๆ แต่สามารถจัดการงานทุกประเภทได้ดี เช่นนอกเหนือจากการทดสอบหน่วย "ต่อเนื่อง" อาจมีการทดสอบเต็มรูปแบบเช่นเดียวกับตอนกลางคืน ซอฟต์แวร์สามารถทดสอบได้กับเวอร์ชัน Python หลายรุ่น, เวอร์ชันไลบรารี่ที่แตกต่างกัน เว็บไซต์สามารถทดสอบการเชื่อมโยงที่ตายแล้ว เราสามารถเรียกใช้การวิเคราะห์แบบคงที่ตัวตรวจสอบรูปแบบเครื่องมือครอบคลุมการทดสอบ ฯลฯ โดยใช้รหัส สามารถสร้างเอกสารได้ เมื่อชุดทดสอบทั้งหมดผ่านกระบวนการบรรจุภัณฑ์อาจเริ่มต้นเพื่อให้คุณพร้อมที่จะเผยแพร่ซอฟต์แวร์ของคุณ สิ่งนี้มีประโยชน์ในการตั้งค่าแบบคล่องตัวที่คุณต้องการผลิตภัณฑ์ที่ปรับใช้ได้ (และสาธิตได้) ตลอดเวลา ด้วยแอพพลิเคชั่นบนเว็บที่เพิ่มขึ้นทำให้มีแนวคิดในการปรับใช้อย่างต่อเนื่อง: หากการทดสอบทั้งหมดผ่านเราสามารถผลักดันการเปลี่ยนแปลงเป็นการผลิตโดยอัตโนมัติ แน่นอนสิ่งนี้ต้องการให้คุณมั่นใจในชุดทดสอบ (ถ้าไม่ใช่คุณมีปัญหาใหญ่กว่า)


3
"CI เหมาะสมเท่านั้นถ้าคุณมีชุดทดสอบ" - โปรดทราบว่าสำหรับภาษาที่คอมไพล์แล้วคอมไพเลอร์เองนั้นเป็นชุดทดสอบพื้นฐานที่จับข้อผิดพลาดทั่วไปจำนวนมาก
user253751

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

1
@amon ไม่จริง ไม่ใช่เรื่องแปลกโดยเฉพาะอย่างยิ่งที่จะทำการเปลี่ยนแปลงในนาทีสุดท้ายแล้วลืมทดสอบการคอมไพล์ก่อนที่จะกระทำ นอกจากนี้ยังจับปัญหาเมื่อคุณเพิ่มการพึ่งพากับสิ่งที่คุณติดตั้งทั่วโลกในเครื่อง แต่ไม่ได้ติดตั้งที่อื่น
jpmc26

24

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

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


8
ฉันต้องการเพิ่ม: วิธีที่ชัดเจนที่สุดที่จะ auomatically ทดสอบระบบโดยอัตโนมัติคือการดำเนินการมัน เช่นคุณสามารถทดสอบเว็บไซต์โดยใช้เครื่องมือเช่น JMeter หรือ Selenium
reinierpost

7

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

งานอื่น ๆ ที่ฉันนึกออกได้ว่าระบบการรวมอย่างต่อเนื่องมักทำ:

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

การก้าวไปอีกเล็กน้อยกับเส้นขอบของ "การรวมอย่างต่อเนื่อง" ในความหมายที่เข้มงวดคุณสามารถทำสิ่งเหล่านี้ได้:

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

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

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

และอาจมีประโยชน์อื่น ๆ ที่ไม่ได้นึกถึง


ขอบคุณสำหรับคำตอบ ตัวอย่างที่ดี ฉันหวังว่าฉันจะลงคะแนนได้มากกว่าหนึ่งคำตอบตามที่ได้รับการยอมรับ: - /
ท่านลอร์ดโลห์

@LordLoh ไม่ต้องห่วง. ฉันแค่ดีใจที่ได้ช่วย =) ขอบคุณที่แจ้งให้เราทราบ
jpmc26

1
โหวตขึ้นตอบยอดเยี่ยม ชอบอะไรก็ได้ถ้าทำไม่ดีคุณอาจไม่ได้รับผลประโยชน์ที่โฆษณาไว้ ความสอดคล้อง EG ความรู้กระบวนการความเรียบง่ายอาจประสบหากคุณสร้างมากเกินไป ดังนั้น ... ประเมินความต้องการของคุณแนบเนียนและเป็นจริง!
brian_o

1

คุณอาจไม่จำเป็นต้องรวบรวมวิธีแก้ปัญหา แต่ CI ยังคงสามารถช่วยคุณได้โดยการเปลี่ยนไฟล์กำหนดค่า / เส้นทางโฟลเดอร์ ฯลฯ และหากคุณอยู่ในทีม - ส่งเสริมการเปลี่ยนแปลงสถานะของผลิตภัณฑ์และปรับใช้

สมมติว่าคุณปรับใช้รหัส Python ของคุณไปยังเซิร์ฟเวอร์ QA 5 แห่งที่แตกต่างกันและต้องการชี้ไปยังฐานข้อมูล QA ที่แตกต่างกันและจากนั้นเมื่อการทดสอบอัตโนมัติ (เรียกใช้โดย CI) ส่งเสริมการสร้างและการปรับใช้ที่นั่น .

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