GitLab CI/CD บทที่ 1 Introduction

กล่าวสวัสดีเพื่อนๆ ชาวโปรแกรมเมอร์ทั้งหลาย เมื่อไม่นานที่ผ่านมาผมได้มีโอกาสได้สัมผัสประสบการณ์การทำทำ CI/CD อย่างจริงๆ จังๆ ด้วย GitLab เนื่องด้วยส่วนตัวเป็นคนสนใจพยายามพัฒนาซอฟแวร์แบบเน้นคุณภาพมาแต่ต้นอยู่แล้ว สาเหตุเพราะความขี้เกียจมาตามแก้บั๊กในภายหลัง ก็เลยศึกษาหาหนทางที่ชาวบ้านเขาทำกันมานมนาน แต่ก็ด้วยความที่ก็ยังถือว่าเป็นเด็กน้อยในวงการและเป็นสายอินดี้ไม่ไปอยู่ บ.พัฒนาซอฟแวร์ใหญ่ๆ ก็เลยยังไม่ได้มีโอกาสสัมผัส CI/CD อย่างเพื่อนๆ เขา เพิ่งจะมาได้จับจริงๆ จังๆ ก็คราวนี้แหละ แล้วพอได้สัมผัสแล้วก็รู้สึกเห็นคุณค่าของมัน และอยากให้นักพัฒนาซอฟแวร์ที่มีแนวคิดแบบเดียวกันได้มีโอกาสพัฒนาตัวเองขึ้นๆ ไป จึงเกิดเป็นแรงอยากจะแบ่งปันประสบการณ์และเขียนเป็น Blog Series

สารบัญ

บทที่ 1 Introduction
บทที่ 2 GitLab Runner

CI/CD คืออะไร และสำคัญอย่างไร?

Continuous Integration (CI) คือ กระบวนท่าที่ใช้สำหรับการรวมร่ามซอฟแวร์ที่มีการพัฒนาแยกส่วนกันอย่างอัตโนมัติ อาจจะโดยหนึ่งหรือหลายนักพัฒนาก็ตามที สุดท้ายแล้วซอฟแวร์ที่พัฒนาชิ้นเล็กๆ ที่พัฒนาขึ้นมาจะต้องนำมารวมกันเป็นชิ้นใหญ่หนึ่งชิ้น จะทำอย่างไรให้มั่นใจได้ว่า ไม่มีชิ้นส่วนใดที่จะส่งผลให้ชิ้นส่วนอื่นๆ พังเสียหาย โดยเฉพาะอย่างยิ่งเมื่อเป็นการพัฒนาโดยโปรแกรมเมอร์ร้อยพ่อพันแม่มาพัฒนาร่วมกัน ยิ่งมีความเสี่ยงที่จะมีนักพัฒนาบางคนอาจจะพลาดพลั่งมือปล่อยบั๊กออกไป โจทย์ก็คือ ทำอย่างไรให้เราป้องกันสิ่งเหล่านั้นได้ คำตอบก็คือ ทำระบบที่คอยทดสอบความเข้ากันได้ของแต่ละชิ้นส่วนโดยอัตโนมัตินั่นเอง และนั่นก็คือการทำ CI

Continuous Delivery (CD) คือ การทำให้ซอฟแวร์ของเราส่งออกไปถึงลูกค้าโดยอัตโนมัติอย่างมีคุณภาพ เป็นขั้นตอนที่ทำต่อหลังจาก CI กล่าวคือ หลังจากที่ทดสอบระบบที่พัฒนาเพิ่มขึ้นมาแล้วว่าสามารถเข้ากันได้ดีไม่มีปัญหา ก็ถึงเวลาส่งซอฟแวร์ดังกล่าวขึ้นไปใช้งานจริง ซึ่งถ้าไม่มีระบบอัตโนมัติก็ต้องมีอัพโหลดขึ้นไปบนเซิร์ฟเวอร์เอง พอเริ่มเห็นว่ามันเป็นงานเดิมๆ ซ้ำๆ ก็เริ่มมีคนทำให้มันเป็นอัตโนมัติ แล้วก็เกิดเป็น CD ขึ้นมา นอกจากนั้น ซอฟแวร์ปัจจุบันบางทีมีการวางบนเครื่องจำนวนมาก หรืออาจจะเป็น Micro Services ที่ใช้ Container จำนวนมาก การทำ CD จะช่วยให้กระบวนการเหล่านั้นง่ายขึ้นเป็นอันมาก

ดังนั้น CI/CD รวมกันจึงเป็นกระบวนทดสอบคุณภาพซอฟแวร์ของซอฟแวร์และส่งขึ้นสู่สาธาณะชนโดยอัตโนมัตินั่นเอง

จะทำ CI/CD ต้องรู้อะไรบ้าง?

CI/CD ความจริงเป็นงานของคนที่รับหน้าที่ DevOps แต่มันช่างเป็นเรื่องปรกติที่หลายๆ องกรค์จะไม่มีตำแหน่งดังกล่าว ดังนั้นพวกโปรแกรมเมอร์มือฉมังนี่ล่ะมักจะเป็นคนทำ ส่วนโปรแกรมเมอร์เด็กๆ ก็มีหน้าที่ต้องเข้ามาดูแลด้วยเช่นกัน

ทักษะที่จำเป็นสำหรับการทำ CI/CD แบบพื้นๆ ก็คือการเขียน Unit Tests และ สคริปต่างๆ สำหรับใช้ Deploy นั่นเอง ลองจินตนาการว่าปรกติเรา Deploy โปรแกรมโดยการอัพโหลดไฟล์ที่ Compile แล้วขึ้นไปบน Server แล้วก็สั่งรันคำสั่งอะไรบางอย่างบนนั้น ทีนี้เราก็เปลี่ยนให้กระบวนการเหล่านั้นถูกเก็บไว้ในไฟล์สคริปหนึ่งไฟล์ แล้วก็สั่งให้คอมพิวเตอร์มันรันให้ เท่านั้นเอง ซึ่งก็จะมีความยากลำบากนิดหน่อยตรงที่ว่า เวลาเราทำเองมันจะเป็น Interaction รอ Input จากเรา ทีนี้เราก็ต้องเตรียม Input ให้พร้อมเรียบร้อย อาจจะเก็บไว้ในตัวแปรของสคริป แล้วก็ค่อยเอามาแทนค่าในภายหลังนั่นเอง ซึ่งตอนทำแรกๆ ก็อาจจะรู้สึกลำบากหน่อยเพราะมันทดสอบยาก แต่พอทำๆ ไปสักพักจับทางได้ก็กลายเป็นคนที่เขียนสคริปได้โดยต้องตั้งแต่ทีแรกไปซะเฉยๆ

แล้วทำไมถึงเลือก GitLab CI?

เหตุผลง่ายมาก เพราะที่บริษัทใช้ GitLab เป็น VCS อยู่ ที่พูดถึง GitLab ที่ใช้นี้คือ GitLab CE ที่โหลดมาลงบน Server ของตัวเอง ทีนี้เมื่อประมาณหนึ่งปีที่ผ่านมา GitLab ก็มีฟีเจอร์ CI ออกมาให้ใช้ ก่อนหน้านี้ก็มีน้องใน บ. ใช้ Jenkin อยู่ แต่ผมมองว่า GitLab ก็มี CI อยู่ในตัวอยู่แล้ว แล้วยังไงเราก็คงเลิกใช้ GitLab ไม่ได้ ก็เลยเลือกมาทำ CI บน GitLab ดีกว่า จะได้ลดชิ้นส่วนที่ต้องดูแลไปอีกชิ้นหนึ่ง ในส่วนของ UI นั้นก็นับว่าใช้ง่ายและสวยงามและใช้ง่ายเลยทีเดียว จะติดก็เพียงแต่สคริปเขียนและทดสอบไม่ง่ายแบบลากวางๆ อย่าง TeamCity แต่ก็ไม่ได้ยากเกินความสามารถจึงกลายเป็นตัวเหตุผลที่เลือกใช้นั่นเอง ส่วนเรื่อง CD ของ GitLab อาจจะยังไม่ได้ครบ Flow มากนัก แต่ก็สามารถใช้งานได้ไม่ติดขัดอะไรมากนัก

โดยสรุปก็คือใช้ GitLab CI เพราะสภาพมันเอื้ออำนวยมากกว่า ถ้าให้เทียบกันจริงๆ แล้วฟีเจอร์ GitLab CI ยังด้อยกว่าเจ้าอื่นพอสมควร เพราะเพิ่งมีฟีเจอร์นี้มาไม่นานมากนัก แต่เห็นก็เห็นอนาคตที่สดใสอยู่เพราะฐานผู้ใช้ GitLab ค่อยข้างแข็งแรงและมีการพัฒนาฟีเจอร์กันอย่างจริงจัง มีของใหม่ออกมาให้เล่นเรื่อยๆ

ส่งท้าย

หวังว่าผู้อ่านคงจะได้แนวความคิดคร่าวๆ ว่า CI/CD มีประโยชน์อย่างไรกับการพัฒนาซอฟแวร์ แล้วในบทต่อๆ ไป เราจะมาเริ่มลงไม้ลงมือทำ GitLab CI กัน ส่วนตอนนี้ใครยังไม่มีเครื่องของตัวเองเข้าไปสมัครใช้งานฟรีๆ ของ GitLab.com ก็ได้นะครับ มี CI ให้ใช้เหมือนกัน แล้วก็ทำ CI ได้ด้วย