CI/CD นั้นย่อมาจาก Continuous Integration/Continuous Delivery เป็น Best practice ของการ Deployment ซอฟต์แวร์ เพื่อรองรับการเปลี่ยนแปลงของ Code ที่มีการเปลี่ยนแปลงบ่อยครั้งโดยทำให้แบบอัตโนมัติ ในกระบวนการ CI/CD จะประกอบไปด้วยกระบวนทดสอบอยู่ด้วยทำให้กระบวนการ deployment มีความน่าเชื่อถือมากขึ้น
โดยทั่วไปแล้ว Developer จะเขียน Code จากเครื่องของ Developer เอง (Local) เมื่อพัฒนาเสร็จแล้วก็จะส่ง Code ขึ้นไปยัง Repository โดยอาจใช้ Tool ต่างๆเช่น GitLab เป็นต้น เมื่อ Commit Code เสร็จแล้วปกติก็จะส่งให้ Tester เพื่อตรวจสอบว่า Source Code ที่นำขึ้นไปนั้นมีข้อผิดพลาดหรือไม่แต่หากใช้กระบวนการ CI/CD นั้นเราจะไม่ใช้ Tester ในการทดสอบระบบแต่เราจะใช้ Test script เพื่อทดสอบระบบแบบอัตโนมัติ ดังนั้น Test script นั้นจะตรวจสอบให้ว่า Source Code ที่นำขึ้นไปนั้นมีข้อผิดพลาดหรือไม่ถ้ามีข้อผิดพลาดก็จะมี Error แจ้งเตือนตาม Tool ต่างๆที่ได้ Config ไว้ เช่น Slack หากไม่มีข้อผิดพลาดก็จะเข้าสู่กระบวนการ Deploy ต่อไป
Continuous Integration คือกระบวนการรวบรวม Source Code ของ Developer เข้ามาเพื่อตรวจสอบว่า Source Code ที่มีการแก้ไขนั้นถูกต้องหรือไม่ โดยทำงานเป็นแบบอัตโนมัติ (automation process) ตั้งแต่การ build การ merged และการทดสอบ เพื่อให้มั่นใจว่าจะไม่เกิดข้อผิดพลาดเกิดขึ้น
การทดสอบใน CI นี้ถือเป็นจุดสำคัญเพราะจะทำให้เรามั่นใจว่า Source Code ที่เรา Merge มานั้นมีข้อผิดพลาดหรือไม่ โดยการทดสอบจะทำงานเป็นแบบอัตโนมัติ (Automated Testing) อาจจะประกอบไปด้วย
- Unit Test
- Validating Test
- Formatting Test
- Functional Test
- Integration Test
- End-to-end Test
Continuous Delivery หรือ Continuous Deployment คือกระบวนการนำ Source Code จาก CI ไป Deploy ขึ้นไปยัง Production เพื่อรองรับการ Deploy ที่อาจะเกิดอย่างรวดเร็วและมีประสิทธิภาพ โดย CD สามารถแยกได้เป็น
- Continuous Delivery จะเป็นการ Deploy ซอฟต์แวร์แต่ใช้วิธีการ Manual Deploy คือเตรียมพร้อมสำหรับการ Deploy อาจจะเพียงแค่คลิ๊กปุ่มก็ Deploy ได้แล้วแต่ที่ยังไม่ Deploy ทันทีทันใดนั้นก็อาจจะต้องรอ Confirm กับทาง Business ถึงวันเวลาที่จะ Deploy หรือ Test script ที่ใช้ตรวจสอบจากกระบวนการ CI นั้นไม่ครอบคลุมเพียงพอทำให้ Tester ขอเวลาในการตรวจสอบเพิ่มเติม
- Continuous Deployment จะเป็นการ Deploy ซอฟต์แวร์แต่ใช้วิธีการ Aumeted Deploy หรือทำเป็นแบบอัตโนมัติทั้งหมด กระบวนการนี้ถึงแม้จะทำค่อนข้างยากโดยเฉพาะขั้นตอนการทดสอบซอฟต์แวร์เพราะในการทดสอบนั้นจะต้องใช้ Test script ทั้งหมดยิ่งซอฟต์แวร์ที่มีขนาดใหญ่หรือซอฟต์แวร์ที่มีความซับซ้อนอาจจะต้องคำนึงถึงการทดสอบที่หลากหลายเช่น Regression test, Security Test, API test, Performance test ซึ่งการสร้าง Test script ก็อาจะเป็นสิ่งที่ยากแล้วไหนยังต้องเจอกับความท้าทายกับ Test script ที่ต้อง Stable อีกด้วย แต่หากองค์กรไหนมีวิธีการจัดการและสามารถทำเป็น Auto Deployment ได้จริงก็ถือเป็นความประสบสำเร็จอย่างมาก