สวัสดีครับ ชาว IT วันนี้กลับมาพบกันอีกครั้งกับ Cloud HM Blog ในหัวข้อ CI/CD คืออะไรกันนะครับ สำหรับผู้เขียนก็เป็นเพียงบุคคลทั่ว ๆ ไป ที่ไม่ได้อยู่ในวงการ Developer นะครับ ฉะนั้น Blog นี้จะขออธิบาย Concept ของ CI/CD ว่าคืออะไร แล้วนำไปใช้ประโยชน์อะไรได้บ้าง โดยที่ไม่ได้ลงลึกรายละเอียดเชิงลึกนะครับ มาเริ่มกันเลยครับ
CI/CD คืออะไร?
CI/CD เป็นวิธีการที่ช่วยให้เราสามารถสร้าง Application ให้ลูกค้าได้ใช้งานด้วยการเอาระบบอัตโนมัติไปใส่ไว้ในขั้นตอนของการพัฒนา Application ครับ ซึ่งเป็นแนวคิดที่ช่วยลดปัญหาในการ Merge Code ใหม่ ๆ ของเหล่า Developer และปัญหาระหว่างทีม Development และทีม Operation ก่อนที่ Deploy ไปยัง Production ครับ
CI/CD ช่วยคุณอย่างไร?
CI/CD จะใช้ระบบอัตโนมัติและช่วยมอนิเตอร์ตลอดช่วงเวลาพัฒนา Application ตั้งแต่การนำ Code ของเหล่า Developer มารวมกัน ไปจนถึงการทดสอบการใช้งานเพื่อที่จะ Deploy ลง Production ต่อไปครับ ขั้นตอนทั้งหมดที่ว่านี้ เราเรียกกันว่า CI/CD Pipeline ช่วยให้ทีม Development และทีม Operation ทำงานด้วยกันได้อย่างต่อเนื่องแบบ Agile คนกลางที่จะมาทำ CI/CD จะเรียกตำแหน่งนี้ว่า DevOps หรือ Site reliability Engineer (SRE) สำหรับความแตกต่างของ 2 ตำแหน่งนี้ สามารถอ่านเพิ่มเติมได้ที่นี่ครับ
อ่านกันมาเยอะแล้วยังไม่รู้ว่า CI กับ CD ย่อมาจากอะไร หลาย ๆ คนคงสงสัยใช่ไหมครับ
CI ย่อมาจาก Continuous Integration
CD มี 2 ความหมาย ได้แก่ Continuous Delivery หรือ Continuous Deployment
สำหรับความหมายของแต่ละอัน เดี๋ยวผมจะเขียนแยกเป็นหัวข้อให้นะครับ
ในการสร้างและพัฒนา Application ในปัจจุบัน จะใช้ Developer หลาย ๆ คน พร้อม ๆ กัน ในการพัฒนา Feature ต่าง ๆ ใน App และจะมีวัน ๆ นึงที่จะต้องเอา Code ของ Developer ที่พัฒนา Feature ต่าง ๆ แยกกัน เอามารวมกัน เราเรียกวันนั้นว่า Merge Day ซึ่งจะต้องใช้เวลา, กำลังคน และค่อนข้างน่าเบื่อ หากต้องมาแก้ไข Source Code ให้สามารถใช้ร่วมกันได้ ที่เป็นแบบนี้ก็เพราะว่าการทำงานของ Developer จะเป็นแบบ Isolate ที่นำ Source code ของ Application มาปรับปรุง หรือพัฒนา Feature ทำให้มีโอกาสที่จะเกิดการ Conflict กันกับ Developer คนอื่น ๆ ปัญหานี้จะเกิดได้จากการที่ Developer แต่ละใช้ Integrated Development Environment (IDE) ไม่เหมือนกัน เช่น Source code editor คนละตัว ใช้ Debugger อีกตัวนึง หรืออาจจะเป็นที่ Build ที่ใช้ แทนที่จะใช้ IDE แบบเดียวที่เป็น Cloud-based ไปเลย
Continuous Integration (CI) คืออะไร มีหน้าที่อย่างไร?
CI จึงเข้ามามีบทบาทในการช่วย Developer ให้ Merge code ที่แก้ไขส่งกลับไปที่ Pool กลาง เช่น Git Repository ซึ่งอาจจะตั้งค่าให้ทำวันละครั้งก็ได้ ทีนี้เวลาที่ Developer มีการเปลี่ยนแปลงอะไรเกี่ยวกับ App ก็จะมี CI ช่วย Merge code รวมไปถึงการทำ Automate test, Unit test และ Integration test เพื่อให้มั่นใจว่าสิ่งที่ Developer เปลี่ยนแปลงไปจะไม่กระทบกับการทำงานของ Application จะให้ได้ว่ามีการทดสอบหลาย ๆ อย่าง ใช่ครับ ทดสอบทุกอย่างตั้งแต่ Class ไปจนถึง Function ใน Module ที่แตกต่างกันแล้วนำมาประกอบเป็น Application ถ้าการทำ Automate test แล้วเจอปัญหาเรื่อง Conflict ระหว่าง Code เดิมกับของใหม่ CI จะช่วยให้ง่ายต่อการหา และแก้ไข Bug ครับ
Continuous Delivery (CD) คืออะไร มีหน้าที่อย่างไร?
หลังจากที่มีการทำ Automation ในเรื่องของการ Build test, Unit test และ Integration test ในฝั่ง CI กันไปแล้ว CD ที่เป็น Continuous Delivery จะทำหน้าที่ส่ง Code ที่มีการตรวจสอบแล้วไปยัง Repository ดังนั้นถ้าต้องการให้ระบบ Continuous Delivery มีประสิทธิภาพมากที่สุด จะต้องทำระบบ CI ให้อยู่ให้ Pipeline เดียวกันกับ CDเป้าหมายของการทำ CD คือการที่พร้อมที่จะนำ Code ไป Deploy ที่ Production ได้ตลอดเวลานั่นเองครับ แต่ Continuous Delivery จะยังเป็น Step Manual อยู่ ไม่ได้เป็น Automation ทั้งหมด
Continuous Deployment (CD) คืออะไร มีหน้าที่อย่างไร?
CD อีกตัวนึงที่ต่าง Continuous Delivery นั่นก็คือ Continuous Deployment ขั้นตอนนี้เป็นขั้นตอนสุดท้ายของ CI/CD Pipeline ซึ่งเป็นส่วนที่ขยายมากจาก Continuous Delivery ครับ ซึ่งจะทำหน้าที่จัดการโดยอัตโนมัติในส่วนของการนำ Code จาก Repository ไป Deploy บน ProductionContinuous Deployment จะเหมาะกับการใช้งานที่มีการ Deploy เป็นจำนวนมาก และมีขั้นตอน Test automation ที่ออกแบบมาเป็นอย่างดีโดยในทางปฏิบัติแล้ว Continuous Deployment หมายถึงการที่ Developer สามารถ Dev app ขึ้นมาแล้วไป Go Live บน Cloud ได้โดยใช้เวลาเพียงไม่กี่นาที (อันนี้สมมุติว่าทดสอบด้วยระบบ Automate ผ่านด้วยนะ ) การที่สามารถทำแบบนี้ได้จะช่วยให้ได้รับ Feedback ต่าง ๆ กลับมาไว ไม่ว่าจะเป็นจากฝั่ง User หรือว่า QA ทีนี้เวลาเราเอา CI กับ CD มารวมกัน เป็น CI/CD ก็จะช่วยให้สามารถ Deploy app โดยลดความเสี่ยงและปัญหาที่จะเกิดขึ้นได้ อย่างไรก็ตาม CI/CD จะเหมาะกับการแก้ไขหรือเปลี่ยน Feature เล็ก ๆ น้อย ๆ มากกว่าแก้ไขทั้งหมด แต่การที่จะทำ CI/CD Pipeline ขึ้นมาจะต้องลงแรง และใช้เวลาเนื่องจากต้องวางแผนเรื่อง Automated test ซึ่งมีการเขียนที่หลากหลายรูปแบบตามสถานการณ์ในการทดสอบนั่นเองครับ
ความแตกต่างของ CI และ CD มีอะไรบ้าง?
- CI จะเป็นระบบ Automate test สำหรับ Developer ถ้าแก้ Code แล้วผ่านระบบ CI ไปได้หมายถึง Code จะ Merge ไปยัง Repository สำเร็จ CI เข้ามาตอบโจทย์ในกรณีที่ Developer มีการ Dev แยกส่วนกันแล้วต้องทำ Code มารวมกัน ทำให้อาจเกิดปัญหาเรื่อง Conflict กันได้
- CD ตัวแรก Continuous Delivery ส่วนใหญ่จะหมายถึงการที่ Developer สามารถ Upload Code เพื่อไปทดสอบหา Bug ที่ Repository เช่น GitHub ได้โดยอัตโนมัติ ซึ่งทำให้ทีม Operation สามารถนำไป Deploy ได้เลย ช่วยให้ลดปัญหาเรื่องของการสื่อสารระหว่าง Developer และทีม Business สุดท้ายแล้วจุดประสงค์ของการทำ Continuous Delivery คือการทำให้มั่นใจว่าเราจะใช้แรง หรือความพยายามที่น้อยที่สุดในการ Deploy Code ใหม่ ๆ นั่นเองครับ
- CD ตัวถัดมา Continuous Deployment หมายถึง การปล่อย Code จาก Repository ไปยัง Production โดยอัตโนมัติ ซึ่งจะถูกใช้งานโดยลูกค้า การทำแบบนี้ช่วยลดการทำงานของทีม Operation ในการทำระบบแบบ Manual ซึ่งอาจทำให้การ Deploy ล่าช้าได้
ประโยชน์ของ CI/CD มีอะไรบ้าง?
- ลดปัญหาเรื่องการแก้ไข Code – เนื่องจากมีระบบที่คอยนำ Code มารวมกันแล้วทดสอบให้
- ลดปัญหาจากการทำงานแยกส่วนกัน – จากเหตุผลเดียวกับด้านบน
- ลดระยะเวลาในการส่งมอบงาน – ระบบเป็นผู้ทดสอบให้ ทำให้ไม่ต้องเสียเวลาให้คนมาตรวจสอบแบบ Manual
- เพิ่มความน่าเชื่อถือในการทดสอบ – เนื่องเวลาแก้ไข Feature จะแก้ไขแบบเล็ก ๆ ทำให้เวลาเปลี่ยนแปลงระบบ จะทดสอบด้วยเวลาไม่นาน และมีความแม่นยำมากกว่าการเริ่มทำใหม่ตั้งแต่ต้น
- ลดค่าใช้จ่าย – เนื่องจากเป็นระบบอัตโนมัติทำให้ Flow การทำงานบางส่วนไม่ต้องใช้จำนวนคนในการ Monitor
- ดูแลง่าย Update ง่าย – การทำ CI/CD ช่วยทำให้สามารถตรวจสอบหาปัญหาได้ในทุก ๆ ขั้นตอน ไม่ว่าจะเป็นในช่วงแรกของการ Build หรือการ Update จาก App เดิมที่มีอยู่ โดย Bug ที่เกิดขึ้นจะถูกตรวจสอบได้ง่ายและตรงจุด ทำให้สามารถ Maintenance และ Update ได้ง่ายครับ
เครื่องมือสำหรับการทำ CI/CD ที่คนส่วนใหญ่นิยมมีอะไรบ้าง?
CI/CD tool ที่ช่วยให้ทีมงานสามารถทำ Automate ในเรื่องของการ Develop, Deploy และ Test จะมีอยู่หลากหลาย บางตัวจะเชี่ยวชาญเป็นพิเศษในการทำ CI บางตัวก็ถนัด CD เป็นพิเศษสำหรับเครื่องสำหรับทำ CI/CD ยอดนิยมที่ใช้กันเยอะมาก ๆ คือ Jenkins ครับแต่ก็มีเครื่องมืออื่น ๆ ให้ใช้งานได้จากหลากหลายช่องทาง ไม่ว่าเป็นจากทาง Public Cloud เจ้าต่าง ๆ หรือจะเป็น GitLab, CircleCI, Travis Cl, Atlassian Bamboo หรืออื่น ๆนอกจากนี้ก็ยังมีบางส่วนที่เป็นเครื่องมือที่ไม่ได้ครอบคลุมระบบ CI/CD ทั้งหมด แต่เป็นเครื่องมือสำหรับ Config การทำ Automation เช่น Ansible, Chef และ Puppet หรือจะเป็นเครื่องมือที่ใช้สำหรับทำ Container เช่น Docker และ rkt และตัวจัดการ Container เช่น Kubernetes
เป็นอย่างไร สำหรับ Blog นี้ หวังว่าจะเป็นประโยชน์ทุก ๆ ท่านนะครับ หากมีข้อสงสัย หรือติชมใด ๆ สามารถ Comment ได้ที่ด้านล่างของ Blog ครับขอบคุณครับ
เป็นอย่างไร สำหรับ Blog นี้ หวังว่าจะเป็นประโยชน์ทุก ๆ ท่านนะครับ หากมีข้อสงสัย หรือติชมใด ๆ สามารถ Comment ได้ที่ด้านล่างของ Blog ครับขอบคุณครับ
หากสนใจบริการที่ Cloud HM สามารถติดต่อได้ที่นี่ พร้อมให้บริการคุณ 24 ชั่วโมง
— Cloud HM