CI/CD คืออะไร จะเอามาใช้กับงาน Developer ได้อย่างไร ?
CI/CD เป็นลำดับขั้นตอนที่ Developer ต้องทำเป็นประจำอยู่แล้ว แต่จะมีการออกแบบให้ใช้งานได้ง่ายขึ้น เป็นขั้นเป็นตอนมากขึ้น รวมถึงอาจให้ทำงานโดยอัตโนมัติ โดยอาศัย "ผู้ช่วย" ซึ่งส่วนใหญ่จะเป็นลักษณะ Pipeline-as-a-Code ตามสไตล์ยุคของ DevOps
พูดถึง CI/CD กันก่อน
-
CI = Continuous Integration
เป็นขั้นตอนที่มักจะอยู่ใน phase Dev จะทำค่อนข้างถี่ เพื่อให้เห็น progress report ต่าง ๆ เช่น Unit Test, Coverage, UI Test รวมถึงการเก็บ version ต่าง ๆ ไว้อาจเป็นลักษณะ nightly build, weekly build ก็ได้
-
CD = Continuous Delivery
เป็นขั้นตอนที่พร้อมให้ Tester ทดสอบระดับนึง ก็จะมีการส่ง version ที่เก็บไว้ไป deliver บน environment ใช้งาน เช่น SIT, UAT หรือ PROD
* SIT = System Integrate Test, UAT = User Acceptance Test, PROD = Production
Pipeline
จริง ๆ แล้ว pipeline ก็คือขั้นตอนที่ developer ทำอยู่เสมอนั่นแหละ เมื่อเราจะทำเป็น CI/CD เราก็จะต้องออกแบบว่าจะทำอะไรบ้าง (Design Pipeline) โดยต้องคิดเสมือน setup project ใหม่บนเครื่องใหม่ เพราะเราจะไม่ใช้เครื่องของเราทำงานเหล่านี้แล้ว
ตัวอย่างกระบวนการ
- Checkout from git
- Unit Testing
- Test Coverage
- UI Testing (Automated Testing)
- Code Analysis
- Build app
- Keep artifact
- VPN
- Deploy
- Notify deploy status
ขั้นตอนเหล่านี้ผมก็ไม่ได้ทำเสมอ บางงานก็มีแค่การ Deploy ด้วยซ้ำ ขึ้นอยู่กับการออกแบบว่าเราอยากได้อะไรมาช่วยเราตรงไหน ซึ่งถ้าจะให้พูดตามตรง คือ ทุกขั้นตอนเรามีทางอื่นที่ทำได้อยู่แล้ว แค่เราไม่อยากทำเอง หรือเมื่อต้องทำซ้ำ ๆ มันก็จะสะดวกมากขึ้น
CI/CD Tools
|
เครื่องมือยอดนิยม การใช้งานค่อนข้างตรงไปตรงมา ถึงแม้ว่าจะมี pipeline syntax เฉพาะของตัวเอง แต่ script อื่น ๆ เราอาจไม่ต้องทำผ่าน jenkins ทั้งหมด เราสามารถใช้วิธีที่คุ้นเคยได้ เช่น windows remote desktop ไปลงโปรแกรมไว้ก่อน เป็นต้น เหมาะสำหรับองค์กรที่มีทรัพยากรเพียงพอ โดยตัว Jenkins สามารถโหลดมาติดตั้งได้ฟรี ค่าใช้จ่ายอาจไปตกที่ physical hardware | ||
|
การใช้งานจะ based-on Docker image ซึ่งเราอาจจะต้องรู้จัก image นั้น ๆ ก่อนนำมาใช้ ข้อดีคือถ้าเราใช้ Git Repository ของ Gitlab อยู่แล้วก็ถือว่าพร้อมใช้ Gitlab CI เลย โดยเฉพาะถ้าใช้ gitlab.com ได้ให้ shared runner มาแล้ว แต่ถ้าอยากได้ทรัพยากรเพิ่มเติมก็ต้องใช้เงินแก้ปัญหาเช่นกัน เหมาะสำหรับทีมขนาดเล็ก และโปรเจคขนาดเล็ก (ถ้าไม่อยากเสียเงินเพิ่มเติม) |
Jenkins' Blueocean |