Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Achieving "Zero Downtime Deployment" with Automated Testing

892 views

Published on

This talk covers how the R&D team at Pronto Marketing approach Continuous Delivery through automated testing and deployment.

It also covers our approach to development environments, test strategies, and automated test environments.

Published in: Technology

Achieving "Zero Downtime Deployment" with Automated Testing

  1. 1. Achieving “Zero Downtime Deployment” with Automated Testing Kan Ouivirach Poomjai Saeyong BugDay Bangkok 2014
  2. 2. ใครมาพูดนะ? Kan Ouivirach Research & Development Engineer kan@prontomarketing.com Poomjai Saeyong Agile Tester boss@prontomarketing.com
  3. 3. หัวข้ออะไรบ้าง? • เกริ่นเล็กน้อย • เริ่มต้นอย่างไร? • Automate กันไปทำเพื่อ? • ถาม-ตอบ
  4. 4. Downtime ในมุมมองของใคร?
  5. 5. ปัจจัยที่สำคัญที่สุด
  6. 6. http://theyec.org/
  7. 7. เริ่มต้น?
  8. 8. ขอ 5 ขั้นตอนพอ http://inspirationlush.com/
  9. 9. “บนเครื่องผมมันเวิร์คอ่ะ” –มิตรสหายท่านหนึ่ง
  10. 10. ขั้นตอนที่ 1 Development Environment
  11. 11. http://www.digitalforreallife.com/2012/11/boosting-teamwork-with-vagrant/
  12. 12. ขั้นตอนที่ 2 Test-Driven Development (TDD)
  13. 13. ขั้นตอนที่ 3 Acceptance Test-Driven Development (ATDD)
  14. 14. ขั้นตอนที่ 4 Continuous Integration (CI)
  15. 15. Build Pipeline
  16. 16. Build Pipeline Pull Code
  17. 17. Build Pipeline Unit Test
  18. 18. Build Pipeline Acceptance Test
  19. 19. Build Pipeline Performance Test
  20. 20. Build Pipeline Unit Test Again after Merge into Master
  21. 21. Build Pipeline Deploy to Demo
  22. 22. Build Pipeline Deploy to Production
  23. 23. ถ้า Build พัง?
  24. 24. เครื่อง Demo (Staging) ก็สำคัญนะเออ • จะมี Database เหมือนกับเครื่อง Production ซึ่งเราสามารถ ทดสอบ Migration Script ได้ • เอาไว้ทดสอบของใหม่ๆ ก่อนเอาเข้า Production
  25. 25. แนวทางปฏิบัติ • เก็บโค้ดไว้ที่เดียวกัน ทำงานบน Branch เดียวกัน (สมมุติว่าใช้ Git) • เวลาจะแก้ไข หรือเพิ่ม Feature 1. เอาโค้ดจาก Remote มาเป็น Working Copy บนเครื่อง 2. เขียนโค้ดเขียนเทสให้เสร็จ 3. อัพเดท Working Copy จาก Remote ดูว่ามีอะไรเปลี่ยนแปลง หรือไม่ 4. รันเทส ถ้าพังก็แก้ ถ้าไม่พังก็เอาโค้ดเข้า Remote
  26. 26. ทีมควรจะต้อง • หมั่น Check-in บ่อยๆ • อย่า Check-in โค้ดพัง • อย่า Check-in โค้ดที่ไม่มีเทส • อย่า Check-in ตอนที่ Build พัง
  27. 27. “Continuous Integration doesn’t get rid of bugs, but it does make them dramatically easier to find and remove.” –Martin Fowler
  28. 28. ขั้นตอนที่ 5 Automated Deployment
  29. 29. How to lose $172,222 a second for 45 minutes
  30. 30. ขั้นตอน Deployment ของ Mina 1. สร้าง Folder ใหม่ 2. เอาโค้ดล่าสุดใส่ Folder นั้น 3. รัน Database Migration Script 4. ย้าย Symbolic Link ไปชี้ที่ Directory นั้น
  31. 31. /var/www/welovebug.com/ |- releases/ |- |- 1/ |- |- 2/ |- |- 3/ |- |- shared/ |- current/ เอา current มาชี้ตรงนี้ เอา Document Root มาชี้ตรงนี้
  32. 32. /var/www/welovebug.com/ |- releases/ |- |- 1/ |- |- 2/ |- |- 3/ |- |- 4/ |- |- shared/ |- current/ เอาโค้ดใหม่ใส่ที่นี่
  33. 33. /var/www/welovebug.com/ |- releases/ |- |- 1/ |- |- 2/ |- |- 3/ |- |- 4/ |- |- shared/ |- current/ แล้วย้าย current มาชี้ที่นี่ สุดท้ายค่อย Restart Services
  34. 34. Automate กันไปทำเพื่อ?
  35. 35. ส่วนหนึ่งก็เพื่อ • ส่งมอบงานที่มีคุณภาพได้เร็วขึ้น และบ่อยขึ้น • เอาเวลาไปพัฒนาสิ่งใหม่ๆ แทนที่จะเอาไปแก้บั๊ก • ลดความเสียหายที่เกิดจากคน • ช่วยทำ Regression Test
  36. 36. ทำให้ถูกตั้งแต่ตอนนี้ http://www.xkcd.com/974/
  37. 37. ถาม-ตอบ

×