CI/CD Concepts and Deployment Strategies
CI/CD คือระบบลดความเสี่ยงของการเปลี่ยนแปลง ไม่ใช่แค่สคริปต์ deploy อัตโนมัติ ทุก stage ต้องช่วยตอบว่า change นี้ปลอดภัยพอจะไปต่อหรือไม่
Continuous Integration และ Continuous Delivery
Continuous Integration หรือ CI คือการรวม code บ่อย ๆ แล้วตรวจด้วย automated checks เช่น lint, unit test, build และ security scan Continuous Delivery คือการทำให้ artifact พร้อม deploy ไป environment ถัดไปได้อย่าง repeatable โดยยังอาจมี manual approval ก่อน production
Build, Test, Deploy และ Rollback
- Build: สร้าง artifact เช่น binary, container image หรือ Terraform plan
- Test: ตรวจ correctness, security, policy และ compatibility
- Deploy: ส่ง artifact version ที่ระบุชัดไป environment เป้าหมาย
- Rollback: กลับไป version ก่อนหน้าหรือสภาพ infrastructure ที่ปลอดภัยเมื่อ release มีปัญหา
Artifact และ Container Image versioning
Artifact ต้อง trace ได้จาก production ย้อนกลับไป source commit, pipeline run และ approval record
สำหรับ container image ควรใช้ immutable tag เช่น Git SHA หรือ release version แทน latest
Deployment strategies
| Strategy | เหมาะกับ | Tradeoff |
|---|---|---|
| Rolling | service ที่รองรับ version เก่า/ใหม่ทำงานร่วมกัน | rollback อาจต้อง deploy version เก่ากลับ |
| Blue/Green | ต้องการ switch traffic ระหว่าง environment ชัดเจน | ใช้ resource เพิ่มและต้องดูแล data compatibility |
| Canary | ต้องการปล่อย traffic ทีละน้อยและวัด metrics ก่อนขยาย | ต้องมี metrics, alarms และ rollback automation ดี |
แนวคิดสำคัญ: deployment strategy ที่ดีต้องเข้ากับ observability ถ้าไม่มี health metrics และ alarms การทำ Canary หรือ Blue/Green จะปลอดภัยน้อยกว่าที่คิด
Common mistakes
- Pipeline deploy ได้ แต่ไม่มี rollback path ที่ทดสอบจริง
- ใช้ artifact ที่ rebuild ระหว่าง environment ทำให้ staging และ production ไม่ใช่ binary/image เดียวกัน
- ไม่มี database migration strategy สำหรับ backward compatibility
Review questions
- CI ต่างจาก Continuous Delivery อย่างไร?
- ทำไม artifact ต้อง trace กลับไป commit ได้?
- Canary ต้องพึ่ง metrics และ alarms อะไรบ้าง?