เหนื่อยมั้ยกับการนั่งเทส นั่ง deploy โค้ดเองทุกวัน? ซึ่งปัญหาเหล่านี้เป็นปัญหามาตั้งแต่ยุคคลาสิคสมัยที่การทำงานในบริษัทใหญ่ที่มีทั้งทีม Dev ฝั่งเขียนแอปขึ้นมา ฝั่ง Ops ที่ทำหน้าที่เอาแอปไปรันบน Infra แต่มักเจอปัญหาฝั่ง Dev รันได้ แต่ฝั่ง Infra กลับพัง แถมแต่ละกระบวนการยังต้องใช้คนทำ ทำงานซ้ำ ๆ ซาก ๆ แต่สมัยนี้มันมีวิธีที่ง่าย เครื่องมือที่ใช้ทำให้กระบวนการต่าง ๆ เป็นอัตโนมัติได้ ด้วย DevOps Workflow โดยเป็นการเชื่อมต่อตั้งแต่กระบวนการ Dev Test ไปจนกถึง Deploy ให้สามารถจบได้ด้วยคน ๆ เดียว ที่งัดความสามารถมาจากเครื่องมือสุดเจ๋ง แต่ก่อนอื่นเราไปรู้จักกับ DevOps กันก่อนดีกว่า
DevOps คืออิหยัง?
ขออธิบายง่าย ๆ เลย DevOps คือการทำให้ทีมพัฒนา (Development) กับทีมปฏิบัติการ (Operations) ที่ปกติแล้วมักไม่ค่อยจะคุยกันหรือไม่ค่อยทำงานร่วมกันอย่างราบรื่น แต่การใช้ DevOps จะทำให้มีการประสานงานกันได้ดีขึ้น เพื่อให้กระบวนการพัฒนาและส่งมอบซอฟต์แวร์เร็วและราบรื่นขึ้น
ใน DevOps การที่งานทั้งหมดมันลื่นไหลได้คือการใช้ CI/CD Pipeline ซึ่งย่อมาจาก Continuous Integration (CI) และ Continuous Delivery/Deployment (CD) แต่ชื่อคอนเซปก็เห็นถึงความต่อเนื่องแล้ว นี่แหละที่เป็นกุญแจหลักของการทำให้ทุกอย่างมันอัตโนมัติ มันทำให้กระบวนการทดสอบโค้ด การดีพลอย (deploy) โค้ด รวมถึงการนำโค้ดไปขึ้นระบบจริงแบบอัตโนมัติ โดยเราไม่ต้องมานั่งเทสหรือ deploy ด้วยตัวเองให้เสียเวลาอีกต่อไป
โดยขา CI จะเป็นขาเดฟและเทส อย่างเช่นเราสามารถทำให้การแก้โค้ดทุกครั้ง ถูกทดสอบอัตโนมัติทันที แล้วจากนั้นถ้าเสร็จแล้ว ก็ปล่อยสู่ขา CD ที่จะทำให้โค้ดที่ทดสอบผ่านแล้วพร้อม deploy ไปยังระบบจริงได้ทันทีแบบอัตโนมัติ ด้วยกระบวนการของ CI/CD นี้แหละที่ทำให้ DevOps สามารถพัฒนาซอฟต์แวร์จะเร็วขึ้น ปล่อยฟีเจอร์ใหม่ ๆ ได้ไว ลูกค้าได้ใช้ของใหม่ก่อนใคร แถมยังลดข้อผิดพลาดที่เกิดจากการทำงานแบบแมนนวลไปได้เยอะ
ตัวอย่างการทำ CI/CD: วิเคราะห์โค้ดแบบอัตโนมัติด้วย SonarQube และ Jenkins
ในการสร้าง CI/CD Pipeline ที่สามารถทำงานอัตโนมัติ โดยตัวอย่างนี้เราจะใช้งาน Jenkins สำหรับจัดการกระบวนการทำงาน CI/CD และ SonarQube เพื่อทำการวิเคราะห์คุณภาพของโค้ดหรือการหาช่องโหว่ในโค้ด (Code Quality & Vulnerabilities) มาดูกันว่าทั้งสองเครื่องมือนี้ทำงานร่วมกันอย่างไรในการสร้างกระบวนการทำ CI/CD
1. เริ่มด้วย Jenkins: พระเอกของการทำ CI/CD
ก่อนอื่นเลย Jenkins มันคือเครื่องมือที่ทำให้ทุกอย่างในกระบวนการ CI/CD (Continuous Integration/Continuous Delivery) เป็นไปแบบอัตโนมัติและไม่ต้องไปทำเองให้เมื่อย สามารถใช้ Jenkins เพื่อดึงโค้ดจาก GitHub (หรือระบบเก็บโค้ดอื่น ๆ) มา build, test แล้วส่งไป deploy ให้ได้
2. SonarQube: หาบั๊กและช่องโหว่
SonarQube คือเครื่องมือที่ใช้วิเคราะห์โค้ดได้ ดูว่าแต่ละบรรทัดมีอะไรพังบ้าง เช่น บั๊กที่ไม่ได้ตั้งใจเขียน หรือการเขียนโค้ดที่เหมือนเขียนมั่ว ๆ อ่านแล้วไม่เข้าใจ (Code Smells)
3. เราสามารถเชื่อมโค้ดของเรากับเครื่องมือ SonarQube ได้ด้วย Jenkins
สามารถผูกให้ Jenkins ส่งโค้ดไปที่ SonarQube เพื่อทำการสแกนโค้ดอัตโนมัติ โดยเริ่มจากการสร้าง Pipeline บน Jenkins
- สร้างโปรเจ็กต์ใน SonarQube ไว้รอ และสร้าง Pipeline บน Jenkins
- เชื่อม Jenkins กับ GitHub เอาโค้ดมารัน แล้วให้ SonarQube สแกนโค้ด
- โค้ดที่ผ่านการสแกนแล้วก็จะถูกดีพลอยไปยัง production พร้อมใช้งาน ทำให้แน่ใจได้ว่าก่อนเอาโค้ดขึ้น Production เรามีการผ่านเครื่องมือที่น่าเชื่อถือแล้ว แต่อย่าลืมเซ็ตค่าในการสแกนดี ๆ ด้วยนะ ด้านล่างจะเป็นโค้ดตัวอย่างของ Jenkins Pipeline
pipeline {
agent any
stages {
stage('Build') {
steps {
git '<https://github.com/your-repo.git>'
bat "npm install"
}
}
stage('Scan') {
steps {
withSonarQubeEnv('SonarQube') {
bat "npm install sonar-scanner"
bat 'npx sonar-scanner -Dsonar.projectKey=your-project-key'
}
}
}
}
}
Plaintextซึ่งถ้าใครอยากลองทำแบบ step by step แอดได้เขียนบทความฉบับจับมือทำไว้ สามารถตามต่อได้ที่
https://www.borntodev.com/2024/03/31/sonarqube-jenkins-integretions/
ใช้ DevOps Workflow แล้ว Success ยังไง?
เรามาถอดรหัสไขความสำเร็จจากผู้ใช้จริง จากเว็บยักษ์ใหญ่สุดมีชื่อเสียงของโลกกันดีกว่าว่าเค้าเอาไปใช้ทำอะไรบ้าง
1. Capital One
Capital One หนึ่งในธนาคารยักษ์ใหญ่ ที่เจอปัญหาใช้เวลาเยอะมากในการกว่าจะปล่อยฟีเจอร์ออกมาในแต่ละรอบ เพราะระบบเดิมที่เป็นการทำงานแบบแมนนวลและมีการทำงานแยกกันระหว่างทีม Dev และ Ops จากปัญหานี้ Capital One จึงได้เดินหน้าสู่การใช้ DevOps โดยเน้นการทำงานอัตโนมัติผ่าน CI/CD และปรับกระบวนการทำงานให้เป็นแบบ Agile เพื่อเพิ่มความรวดเร็วและความคล่องตัว นอกจากนี้ยังมีการใช้ DevSecOps เพื่อรวมการตรวจสอบความปลอดภัยเข้าไปในทุกขั้นตอนของการพัฒนา ส่งผลให้กระบวนการส่งมอบซอฟต์แวร์รวดเร็วขึ้น 50% และมีการลดข้อผิดพลาดในโค้ด พร้อมทั้งรักษามาตรฐานความปลอดภัยสูงสุด
2. Etsy
Etsy ซึ่งเป็นแพลตฟอร์มอีคอมเมิร์ซสำหรับสินค้าทำเจอกับปัญหาในการทำซอฟต์แวร์เหมือนกัน โดยมีปัญหาหลักคือ การหยุดรอกันบ่อยครั้งเนื่องจากกระบวนการ deploy และการทดสอบที่ไม่ได้ทำอย่างอัตโนมัติ ส่งผลกระทบต่อความพึงพอใจของลูกค้าที่ออกซอร์ฟแวร์หรืออัปเดตแต่ละรอบช้ามาก ทั้งสองทีมทำงานแยกกันเป็น silo ทำให้ Etsy ต้องปรับปรุงระบบการพัฒนาโดยหันมาใช้แนวทาง DevOps ผ่านการใช้ CI/CD และ Infrastructure as Code (IaC) ด้วยเครื่องมือเช่น Jenkins, CircleCI และ Terraform กระบวนการเหล่านี้ช่วยลดเวลาในการออกฟีเจอร์ใหม่ เพิ่มคุณภาพของโค้ด และลดความถี่ของการหยุดทำงาน Etsy ยังเน้นวัฒนธรรมการทำงานร่วมกันระหว่างทีมต่าง ๆ ส่งผลให้การสื่อสารและการแก้ไขปัญหาเป็นไปได้อย่างรวดเร็วและมีประสิทธิภาพ
3. Netflix
เจ้าพ่อแห่งวงการสตรีมมิ่ง Netflix ก่อนหน้านี้เค้าก็ได้เจอปัญหาด้านการจัดการโครงสร้างพื้นฐานขนาดใหญ่และการรองรับการเติบโตที่รวดเร็วของผู้ใช้จำนวนมาก นอกจากนี้ Netflix ยังต้องการปล่อยฟีเจอร์ใหม่ ๆ อย่างต่อเนื่องเพื่อตอบสนองความคาดหวังของผู้ชม โดยเพื่อแก้ไขปัญหานี้ Netflix ได้เปลี่ยนมาใช้แนวทางแบบ DevOps โดยนำ Cloud-Native DevOps มาใช้กับ Microservices ทำให้สามารถจัดการโครงสร้างพื้นฐานได้ง่ายและรองรับการเติบโตได้อย่างมีประสิทธิภาพ นอกจากนี้ Netflix ยังใช้ CI/CD Pipelines ด้วยเครื่องมืออย่าง Spinnaker เพื่อทำให้การทดสอบและ deployment เป็นอัตโนมัติ รวมถึงการใช้เครื่องมือ Chaos Monkey ในการทดสอบความยืดหยุ่นของระบบ ผลลัพธ์คือ Netflix สามารถปล่อยฟีเจอร์ใหม่ได้เร็วขึ้น ลด downtime และพัฒนาประสบการณ์ของผู้ใช้อย่างต่อเนื่อง ซึ่งช่วยให้บริษัทคงความเป็นผู้นำในตลาดได้อย่างมั่นคง
จากบทความนี้ เราได้เห็นแล้วว่า DevOps ไม่ใช่เพียงแค่แนวทางใหม่ในการทำงานระหว่างทีม Dev และ Ops แต่ยังเป็นแนวทางที่ช่วยยกระดับการพัฒนาและการส่งมอบซอฟต์แวร์ให้มีประสิทธิภาพมากยิ่งขึ้น ไม่ว่าจะเป็นการทำให้การทดสอบและดีพลอย (deploy) โค้ดเป็นอัตโนมัติ การนำเครื่องมืออย่าง Jenkins และ SonarQube มาใช้ในการสร้าง CI/CD Pipeline หรือแม้แต่การดูตัวอย่างจากบริษัทชั้นนำที่ประสบความสำเร็จอย่าง Capital One, Etsy และ Netflix ที่หันมาใช้ DevOps จนทำให้สามารถเพิ่มความเร็ว ลดข้อผิดพลาด และรักษาคุณภาพในการปล่อยฟีเจอร์ใหม่ ๆ ได้อย่างต่อเนื่อง
โดย use case ทั้งหมดที่แอดนำมาเล่านี้ใครอยากไปตามอ่านต่อ สามารถอ่านเพิ่มเติมได้ที่ลิงก์นี้เลย 🔗 https://attractgroup.com/blog/devops-success-stories-real-life-case-studies/