Credit: AWS
สวัสดีท่านผู้อ่านทุกท่านอีกครั้งครับ ในบทความนี้เราจะมาเจาะลึก tool ตัวหนึ่งของ AWS ที่จะช่วยให้เราทำงานได้ง่ายขึ้น นั่นก็คือ CI/CD นั่นเอง ซึ่งถ้าหากใครที่ยังไม่ทราบว่าเข้า CI กับ CD คืออะไรและมีความสำคัญยังไง ก็ลองอ่านบทความแนะนำ tool นี้ได้ในบทความของ Cloud HM ตามลิงก์นี้ได้เลย
ความหมายของ CI/CD คือ การผสานรวมอย่างต่อเนื่องและการส่งมอบอย่างต่อเนื่อง (ชื่อเป็นทางการและยาวมาก ๆ ดังนั้นในบทความนี้จะขอเรียกสั้น ๆ ว่า CI/CD)
เพื่อเป็นการทบทวนเกี่ยกวับ CI/CD เล็กน้อย จริง ๆ แล้วมันเป็นวิธีการที่ช่วยให้เราสามารถสร้าง Application ให้ลูกค้าได้ใช้งานด้วยการเอาระบบอัตโนมัติไปใส่ไว้ในขั้นตอนของการพัฒนา Application ครับ ซึ่งเป็นแนวคิดที่ช่วยลดปัญหาในการ Merge Code ใหม่ ๆ ของเหล่า Developer และปัญหาระหว่างทีม Development และทีม Operation ก่อนที่ Deploy ไปยัง Production ครับ ซึ่งถ้าหากดูตาม pipeline ด้านล่างจะพบว่ามันคือเป็นขั้นตอนหรือแนวทางที่ช่วยให้เราทำงานได้อย่างมีประสิทธิภาพ โดยเริ่มต้นจากการวางแผน การเขียนโค้ด การสร้าง application การทดสอบ การปล่อยผลิตภัณฑ์ การนำไปใช้ และการดำเนินการ ซึ่งเราสามารถรวมกลุ่มการทำซ้ำออกเป็นได้สองแบบ นั่นก็คือ CI และ CD
สำหรับการเริ่มต้นการเรียนรู้ CI/CD นั้นจริง ๆ แล้วก็แค่สามารถเขียน unit test หรือการทดสอบฟังก์ชันหรือโค้ดแบบหน่วยย่อยได้ก็เพียงพอแล้ว รวมไปถึงการเขียน script ต่าง ๆ ก็มีส่วนช่วยให้เราสามารถทำงานแบบ automation ได้ง่ายขึ้นสมมติว่าปกติเรามีการนำโปรแกรมไปใช้งานบน production (deploy) โดยการอัพโหลดไฟล์ที่ Compile แล้วขึ้นไปบน Server แล้วก็สั่งรันคำสั่งอะไรบางอย่างบนนั้น คราวนี้เราเปลี่ยนให้กระบวนการเหล่านั้นถูกเก็บไว้ในไฟล์ script หนึ่งไฟล์ แล้วก็สั่งให้คอมพิวเตอร์มันทำงานหรือ execute script ให้ ซึ่งจุดที่น่าสนใจก็คือเราจะต้องมีการเตรียม input ของเราเองให้พร้อมเพื่อที่ process สามารถดำเนินไปได้เอง
สำหรับผู้บริการ cloud ยักษ์ใหญ่อย่าง AWS ก็มีบริการ service ที่รองรับการทำ CI/CD ด้วย โดยด้านล่างจะเป็นการอธิบายการตั้งค่า pipeline ของ CI/CD บน AWS ครับ
โดยในบทความนี้ ผู้อ่านจะได้เรียนรู้วิธีการตั้งค่า pipeline บน AWS CI/CD pipeline ช่วยให้คุณปรับขั้นตอนต่าง ๆ ในกระบวนการส่งมอบซอฟต์แวร์ (delivery & deploy) ให้เป็นแบบอัตโนมัติ เช่น การเริ่มต้นสร้างอัตโนมัติแล้วปรับใช้ไปยัง Amazon EC2 instance โดยในส่วนนี้เราจะต้องใช้ AWS CodePipeline ซึ่งเป็นบริการที่ช่วยสร้าง ทดสอบ และปรับใช้โค้ดของเราทุกครั้งที่มีการเปลี่ยนแปลงโค้ด โดยอิงตามโมเดลกระบวนการเผยแพร่ที่เราได้กำหนดไว้ หลังจากนั้นก็ใช้ CodePipeline เพื่อควบคุมแต่ละขั้นตอนในกระบวนการเผยแพร่โปรแกรมหรือโค้ดของเรา โดยในส่วนนี้เราจะต้องใส่บริการอื่น ๆ ของ AWS เข้าไปใน CodePipeline ให้เป็นส่วนหนึ่งของการติดตั้งหรือ script เพื่อทำให้ pipeline การส่งมอบซอฟต์แวร์ของเราเสร็จสมบูรณ์ เรียกได้ว่าตั้งแต่ต้นน้ำถึงปลายน้ำเลยทีเดียว
Credit: AWS
ก่อนที่จะเริ่มต้นการตั้งค่านั้นเราจะต้องเตรียมเครื่องมือให้พร้อมก่อน โดยสิ่งที่ต้องเตรียมมีคร่าว ๆ ดังนี้
- บัญชีของ AWS: แน่นอนครับว่าถ้าไม่มี AWS แล้วจะสามารถใช้งาน service แต่ละตัวได้ยังไงล่ะ ดังนั้นให้ทำการสมัครหรือใช้บัญชีของ AWS ที่มีอยู่เพื่อเริ่มตั้งค่า pipeline ได้เลย
- ประสบการณ์พื้นฐานในการใช้งาน AWS: เนื่องจากว่าการตั้งค่า CI/CD นั้นจะต้องมีการ deal กับ service หลาย ๆ ตัวของ AWS ดังนั้นผู้ใช้งานควรจะต้องมีความคุ้นเคยกับ AWS และบริการของ AWS ในระดับพื้นฐาน-ปานกลางเลยครับ
- สิทธิ์การเข้าถึง AWS: ก่อนที่จะสร้าง pipeline CI/CD ด้วย CodePipeline คุณอาจจำเป็นต้องตั้งค่าสิทธิ์ IAM ของ AWS เพื่อเริ่มสร้าง pipeline ก่อน ดังนั้นใครที่เป็น user ที่อยู่ในระดับ orgnaization หรือองค์กร อาจจะต้องเช็คนิดนึงนะครับ ถ้ายังไม่มีสิทธิ์ในการตั้งค่า ก็อาจจะต้องแจ้งไปยัง admin ขององค์กรนั้น ๆ ครับ
คราวนี้เรามาดูกันต่อว่าเราสามารถทำอะไรกับ CI/CD ได้บ้าง
- สร้าง pipeline สำหรับการ release หรือเผยแพร่ที่ทำให้กระบวนการส่งมอบซอฟต์แวร์ของคุณเป็นอัตโนมัติโดยใช้ AWS CodePipeline
- เชื่อมต่อคลังแหล่งข้อมูล เช่น AWS CodeCommit, Amazon S3 หรือ GitHub เข้ากับ pipeline
- ทำให้การปรับใช้โค้ดเป็นอัตโนมัติ โดยการเชื่อมต่อ pipeline ของคุณกับ AWS CodeDeploy ซึ่งเป็นบริการที่จะปรับใช้การเปลี่ยนแปลงโค้ดที่ดำเนินการกับคลังแหล่งข้อมูลของคุณไปยัง Amazon EC2 instance
- ใส่บริการติดตั้ง เช่น Jenkins (อันนี้ค่อนข้าง advanced นะ)
หมายเหตุ สังเกตว่าผู้เขียนได้ highlight service ของ AWS ด้วยตัวเข้ม
เรามาดู Use case หรือ best practice อันนี้กันดีกว่า นั่นก็คือ การใช้ CodePipeline กับ Amazon S3, AWS CodeCommit, และ AWS CodeDeploy ซึ่งถือว่าเป็นพื้นญฐานที่สุดเลยสำหรับการเรียนรู้ CI/CD pipeline!!!
เมื่อเราสร้าง pipeline แล้ว (โดยดูรายละเอียดได้จากลิงก์นี้ https://docs.aws.amazon.com/codebuild/latest/userguide/how-to-create-pipeline-console.html) ตัว CodePipeline จะอินทีเกรตหรือรวมกับ AWS products ที่จะเป็นเสมือนกับผู้ช่วยในแต่ละขั้นตอนหรือ stage ของ pipeline เมื่อเราเลือก stage ในตัวสร้างหรือ Wizard ของเราแล้ว เราจะต้องเลือกตัวเก็บข้อมูลหรือ source storage และอย่างน้อย ๆ เราจะต้องสร้างหรือ deploy stage ด้วยหนึ่งนั้น โดย wizard จะสร้าง stage ให้เราโดยใช้การตั้งค่าที่เป็นแบบ default setting เช่น ชื่อ ซึ่งไม่สามารถเปลี่ยนทีหลังได้นะ โดยชื่อของ stage นั้นจะมีด้วยกันสามแบบหรือสาม default name ดังต่อไปนี้
- A source action stage จะมีชื่อเริ่มต้นคือ “Source”
- A build action stage จะมีชื่อเริ่มต้นคือ “Build”
- A deploy action stage จะมีชื่อเริ่มต้นคือ “Staging”
โดยขั้นตอนในการสร้างก็คือ ให้สร้าง pipeline ง่าย ๆ ของ S3 bucket ก่อน ซึ่งจะช่วยให้เราทำความคุ้นเคยกับ wizard ส่วนอีกแบบนึงที่อาจจะลองไปสร้างเองได้ก็คือการสร้าง pipeline แบบง่าย ๆ ของ CodeCommit repository โดยจะเป็นการใช้ wizard เพื่อสร้าง Source pipeline ที่ใช้ AWS CodeDeploy เพื่อ deploy ตัวแอพพลิเคชันของเราจาก AWS CodeCommit ไปยัง Amazon EC2 instance ซึ่งรันด้วย Amazon Linux นั่นเอง
โดยสรุปแล้ว ข้อดีของการทำ CI/CD คือ
- ช่วยให้เราสามารถ automate แอพพลิเคชันของเราได้
ตัว CD มีขั้นตอนที่ช่วยให้ทีมเขียนโค้ดของเราสามารถตรวจสอบ สร้าง ทดสอบ และเตรียมโค้ดของเราสำหรับการส่งต่อหรือเผยแพร่ไปบน production ได้ด้วย ซึ่งมันทั้งมีประสิทธิภาพ คล่องตัว ยืดหยุ่น เร็ว และปลอดภัย
- ช่วยเพิ่ม productivity ของ developer ในบริษัทของเรา
นั่นก็คือแทนที่ developer ของเราจะต้องมาคอยทำงานทีละขั้นตอนแบบ manual เราสามารถให้เขาใช้ CI/CD เพื่อทำงานซ้ำ ๆ กันแบบอัตโนมัติได้เลย ซึ่งก็สอดคล้องกับข้อที่ 1
- ปรับปรุงคุณภาพของโค้ด
ตัว CD ช่วยให้เราสามารถหาและเข้าถึง bug ได้อย่างรวดเร็ว ทำให้เราสามารถแก้ไขจุดผิดพลาดใน program หรือ application ของเราได้ในเวลาที่ไม่ช้า
- Deliver updates faster
ตัว CD ช่วยให้ทีมของเราสามารถส่งความคืบหน้าหรือ updates ไปยังลูกค้าได้อย่างรวดเร็ว นั่นก็คือลูกค้าสามารถคอยเช็คสถานะของ application ได้จาก dashboard ที่เราได้เตรียมไว้ ซึ่งมันจะคอยอัพเดทข้อมูลที่ส่งต่อมาจาก CodePipeline แบบต่อเนื่องอย่างสม่ำเสมอ ซึ่งเป็นการเพิ่มความน่าเชื่อถือและความเป็นมืออาชีพของทีมของเราอีกด้วย
อ่านมาจนถึงจุดนี้แล้วถ้าหากผู้อ่านมีความสนใจในบริการของ AWS โดยเฉพาะถ้าอยากจะปรึกษาเกี่ยวกับการทำ CI/CD กับบริการต่าง ๆ ของ AWS เพื่อเพิ่มประสิทธิภาพการทำงานของทีมหรือโค้ดของบริษัท ก็สามารถติดต่อ Cloud HM ได้โดยตรงเลยครับ เพราะเรามีการให้บริการ Cloud Platform ครบวงจร ทั้ง Domestic Cloud และ Global Cloud เพื่อตอบสนองความต้องการรอบด้านของลูกค้าครับ
— Cloud HM