CI / CD คืออะไร? อธิบายการผสานรวมอย่างต่อเนื่องและการส่งมอบอย่างต่อเนื่อง

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

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

กำหนด CI / CD

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

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

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

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

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

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

วิดีโอที่เกี่ยวข้อง: วิธีส่งโค้ดให้เร็วขึ้นด้วย CI / CD

การผสานรวมอย่างต่อเนื่องช่วยเพิ่มการทำงานร่วมกันและคุณภาพได้อย่างไร

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

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

หลายทีมใช้แฟล็กฟีเจอร์กลไกการกำหนดค่าเพื่อเปิดหรือปิดฟีเจอร์และโค้ดในขณะรันไทม์ ฟีเจอร์ที่ยังอยู่ระหว่างการพัฒนาจะถูกรวมไว้ด้วยแฟล็กฟีเจอร์ในโค้ดปรับใช้กับสาขาหลักไปจนถึงการใช้งานจริงและปิดใช้งานจนกว่าจะพร้อมใช้งาน จากการสำรวจล่าสุดพบว่า 63 เปอร์เซ็นต์ของทีมที่ใช้ฟีเจอร์แฟล็กรายงานการทดสอบที่ดีขึ้นและซอฟต์แวร์คุณภาพสูงขึ้น เครื่องมือการตั้งค่าสถานะคุณลักษณะเช่น CloudBees Rollout, Optimizely Rollouts และ LaunchDarkly ผสานรวมกับเครื่องมือ CI / CD และเปิดใช้งานการกำหนดค่าระดับคุณลักษณะ

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

จากนั้นกระบวนการสร้างจะเป็นไปโดยอัตโนมัติโดยการบรรจุซอฟต์แวร์ฐานข้อมูลและส่วนประกอบอื่น ๆ ทั้งหมด ตัวอย่างเช่นหากคุณกำลังพัฒนาแอปพลิเคชัน Java CI จะทำแพ็กเกจไฟล์เว็บเซิร์ฟเวอร์แบบสแตติกทั้งหมดเช่น HTML, CSS และ JavaScript พร้อมกับแอปพลิเคชัน Java และสคริปต์ฐานข้อมูลใด ๆ

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

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

การทดสอบอย่างต่อเนื่องเหนือกว่าการทดสอบอัตโนมัติ

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

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

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

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

ไปป์ไลน์ซีดีทำการเปลี่ยนแปลงสภาพแวดล้อมหลาย ๆ แบบโดยอัตโนมัติ

การจัดส่งแบบต่อเนื่องเป็นระบบอัตโนมัติที่ผลักดันแอปพลิเคชันไปยังสภาพแวดล้อมการจัดส่ง โดยทั่วไปทีมพัฒนาส่วนใหญ่จะมีสภาพแวดล้อมการพัฒนาและการทดสอบอย่างน้อยหนึ่งรายการซึ่งมีการจัดเตรียมการเปลี่ยนแปลงแอปพลิเคชันสำหรับการทดสอบและตรวจสอบ เครื่องมือ CI / CD เช่น Jenkins, CircleCI, AWS CodeBuild, Azure DevOps, Atlassian Bamboo หรือ Travis CI ใช้เพื่อทำให้ขั้นตอนเป็นไปโดยอัตโนมัติและจัดทำรายงาน

ไปป์ไลน์ซีดีทั่วไปมีขั้นตอนการสร้างทดสอบและปรับใช้ ไปป์ไลน์ที่ซับซ้อนมากขึ้นมีหลายขั้นตอนเหล่านี้:

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

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

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

เมื่อเลือกเครื่องมือ CI / CD แล้วทีมพัฒนาต้องตรวจสอบให้แน่ใจว่าตัวแปรสภาพแวดล้อมทั้งหมดได้รับการกำหนดค่าภายนอกแอปพลิเคชัน เครื่องมือ CI / CD อนุญาตให้ตั้งค่าตัวแปรเหล่านี้การปิดบังตัวแปรเช่นรหัสผ่านและคีย์บัญชีและกำหนดค่าในเวลาที่ปรับใช้สำหรับสภาพแวดล้อมเป้าหมาย

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

การใช้ไปป์ไลน์ CI / CD กับ Kubernetes และสถาปัตยกรรมไร้เซิร์ฟเวอร์ 

หลายทีมที่ดำเนินการไปป์ไลน์ CI / CD ในสภาพแวดล้อมระบบคลาวด์ยังใช้คอนเทนเนอร์เช่น Docker และระบบ orchestration เช่น Kubernetes ตู้คอนเทนเนอร์อนุญาตให้ใช้บรรจุภัณฑ์และการขนส่งในรูปแบบมาตรฐานพกพาได้ คอนเทนเนอร์ทำให้ง่ายต่อการปรับขนาดหรือฉีกสภาพแวดล้อมที่มีปริมาณงานที่หลากหลาย

มีหลายวิธีในการใช้คอนเทนเนอร์โครงสร้างพื้นฐานเป็นรหัสและไปป์ไลน์ CI / CD ร่วมกัน คุณสำรวจตัวเลือกต่างๆได้โดยใช้บทช่วยสอนเช่น Kubernetes กับ Jenkins หรือ Kubernetes ด้วย Azure DevOps

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

CI / CD ช่วยให้สามารถปรับใช้โค้ดได้บ่อยขึ้น

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

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

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

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

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