จาก FTP สู่การส่งข้อมูลอย่างรวดเร็วด้วยระบบ CI/CD

253
253

FTP เป็นเครื่องมือในการส่งข้อมูล Website ขึ้น Server มาช้านาน (นานมากๆ) ไม่ว่าจะเขียนด้วยภาษาใดยังไงซะ Dev แต่ละท่านก็ต้องเคยผ่าน FTP กันแทบทั้งสิ้น ด้วยความที่ Tools เยอะ ใช้ง่ายเข้าใจง่าย แต่เมื่อมีระบบที่มากขึ้น ซับซ้อนมากขึ้น ประกอบกับ เทคโนโลยีต่างๆก้าวเข้ามามีบทบาทมากขึ้น โดยเฉพาะ พวก Cloud, Container ทำให้ Work Flow แบบเก่าอาจต้องมีการเปลี่ยนเพื่อให้ได้ประสิทธิภาพดียิ่งขึ้น

แล้วคำว่าแบบเก่าคือยังไง ?

ยกตัวอย่างระบบที่เล็กๆก่อนแล้วกัน เวลาเรา Dev เสร็จเราก็จะเอา File โยนขึ้น FTP เท่านั้นจบ อันนี้สบายๆ Dev คนเดียวสามารถดูแลความเสี่ยงต่างๆได้ ทั้งการ ปรับแต่งข้อมูลใน DB ทั้งการ เตรียม File Config File ในขณะที่อยู่ Production แต่ในระบบที่ซับซ้อนของบริษัทใหญ่ๆมักจะไม่เป็นแบบนั้น

ในสมัยก่อนการเอา File ไป Update ลง Production Dev มักจะไม่มีสิทธิเข้าถึงเครื่อง Production โดยตรงจะเข้าถึงผ่าน ทีม Infrastructure หรือไม่ก็ Senior ที่ไม่ได้เกี่ยวข้องกับระบบนั้นโดยตรง โดยระหว่าง Dev จะทำการเตรียม File ทั้ง Dist Package และ File Alter Table .sql (ในกรณีที่มีการเปลี่ยนโครงสร้าง DB) จากนั้นก็เขียนขั้นตอนการวาง File ว่าเอา File ไปวางที่ไหน รันคำสั่งอะไรบ้าง จนถึงขั้นตอนทดสอบว่าใช้งานได้ โดยขั้นตอนพวกนี้จะ Run ตอนกลางคืน 

สังเกตดีๆ จะมีจุดบอดอยู่ 3 จุด คือ

1. ใช้คน การใช้คนเนี่ยถือเป็นจุดบอดเพราะคนยังไงก็คือคน ไม่ Dev ทำขั้นตอนไม่ครบ ก็คน Deploy ทำผิดขั้นตอนซึ่งมันเกิดขึ้นได้

2. ผู้ที่นำโปรแกรมไป Deploy ขาดความชำนาญในโปรแกรมนั้นๆ ผลคือหากมีข้อผิดพลาดเกิดขึ้นจะไม่สามารถแก้ปัญหาใดๆได้เลย ทำได้แต่ Capture Log ส่งให้

3. ความรับผิดชอบจะแบ่งเป็น 2 คน ซึ่งตามหลักอาจเป็นผลดีที่มีผู้รับผิดชอบมากขึ้น แต่จริงๆคือผลเสียที่สุดท้ายแล้วเราจะหาสาเหตุของปัญหาเหล่านั้นได้ยากมากว่ามาจากที่ใดและแก้ไขอย่างไร

เปลี่ยนเถอะครับ เพื่อชีวิตที่ดีขึ้น

ในยุค 2022 เป็นยุคที่อารยธรรมโลก IT เจริญขึ้นมาก ซึ่งก่อนจะถึงวิธีที่เราจะใช้กัน มันก็มีวิธีที่จะมา ปิดปัญหาด้านบนเยอะมาก และวิธีที่ดูแล้วจะ Smooth และ ใช้กันเยอะที่สุดคือระบบ CI/CD

CI/CD ย่อมาจาก 2 คำ Continuous Integration (CI) คือ คือการรวบรวม Code และ ทดสอบ ให้ถี่ถ้วนว่า Code แต่ละส่วนเข้ากันได้ ไม่ชนกัน และ Continuous Delivery (CD) คือระบบการนำ Code ที่ผ่านการทดสอบและรวบรวมเรียบร้อยแล้วส่งขึ้น Server โดยรวมถึงการรัน Script ต่างๆ ซึ่ง Script นี้จะถูกเตรียมโดยผู้พัฒนา

มาคุย Flow ใหม่

ผมจะขอ Focus ที่ CD นะครับ เริ่มจาก Dev ส่ง File ทั้งหมดลง Source Control (ค่ายไหนก็ได้) จากนั้นระบบ CI/CD ก็จะทำงาน โดยการ Run Script ที่ทาง Infra/DevOps นั้นเตรียมไว้ล่วงหน้าในระบบ โดย CI จะทำงานก่อน ต่อด้วย CD ทำงาน จากนั้น Code ก็จะถูกส่งไปยัง Server ปลายทาง อัตโนมัติ !!!! ย้ำว่า อัตโนมัติ !!! โดย Server ปลายทางสามารถเป็นอะไรก็ได้ตั้งแต่ FTP ไปจนถึง Container

จะสังเกตว่า Dev นั้นเป็นคนดูแลการ Deploy เอง คนที่เอา Package ขึ้นก็ไม่ใช่ Infra แต่เป็นการเตรียมการมาล่วงหน้ามาเรียบร้อยแล้วตั้งแต่เริ่ม Project ทำให้ลดโอกาสความผิดพลาดได้เยอะมากเพราะทำโดยระบบแทบจะ 100% นอกจากนี้แล้วการรัน Script เพิ่มเติมต่างๆก็สามารถทำได้ง่ายมาก และโดยทั่วไป ระบบ CI/CD จะทำการเก็บ log ผลการ Deploy รวมถึงการแจ้งเตือนข้อผิดพลาดมาให้เราได้อีกด้วย !!!

อีกข้อดีคือ ด้วยความที่เราใช้ Version Control เป็นตัวตั้งต้น ทำให้เมื่อ Script มี ปัญหาที่ Version ต่างๆเราสามรถใช้ Source Control ทำการ Reverse Code ของเราไปใช้ Version เดิมได้ทันทีอีกด้วย (Cool มากๆ)

ถ้าอยากได้ระบบแบบนี้มี Tool แนะนำไหม ?

จริงๆแล้ว ถ้าใครคุ้นชินกับ GITLAB นั้นมีบริการ CI/CD มีมาให้นานแล้วครับเขียน Script แล้วใช้ได้เลย ทางฝั่งของ GitHub นั้นก็มีแล้วเช่นกัน ส่วนถ้าใครใช้ Source control เจ้าอื่นหรือจะต่อระบบอื่นๆ และเป็น Enterprise Grade นั้นคือ JANKIN นั่นเองครับ

อยากให้ทุกท่านได้ลองเทคโนโลยีใหม่กันเยอะๆนะครับโลกเรามันเปลี่ยนไปไวมากสิ่งใหม่ๆ มีการพัฒนาอย่างไม่หยุดครับ สำหรับท่านที่สนใจใช้งานเทคโนโลยี DevOps เพื่อพัฒนา Application สมัยใหม่ให้กับองค์กร สามารถติดต่อ Cloud HM ได้ผ่านช่องทางนี้เลยนะครับ ขอบคุณครับ

— Cloud HM