CI/CD ตัวช่วยสำคัญในการทำงานของ Developer ให้ง่ายขึ้น เร็วขึ้น

Work Flow แบบเดิม ๆ ในการส่งมอบซอฟต์แวร์ หรือแอปพลิเคชันที่ต้องอาศัยวิธีการ Manual Handoffs นั้นทำให้ Velocity ในการพัฒนาลดลง จึงทำให้ CI/CD เข้ามาเป็น Technical Backbone ที่จะช่วยแก้ปัญหา Bugs ต่าง ๆ ช่วยเพิ่มความรวดเร็วในการส่งมอบงาน Software Development ให้ราบรื่นยิ่งขึ้น โดยเปลี่ยน Software Development Lifecycle (SDLC) ทั้งหมดให้เป็น Pipeline อัตโนมัติที่สามารถ Integrate, Test, และ Deploy โค้ดได้อย่างรวดเร็ว เพื่อสร้าง Feedback Loop ที่สั้นที่สุดจาก Code Commit สู่ Production

บทความนี้ สิริซอฟต์จะพาคุณมารู้จักกับ CI/CD กันให้มากขึ้น ตั้งแต่ความแตกต่างของทั้ง 2 กระบวนการ ไปจนถึงประโยชน์ของ CI/CD ต่อ Developer และ CI/CD Tools ที่ได้รับความนิยมว่ามีอะไรบ้าง รวมถึงข้อมูลอื่น ๆ ที่เกี่ยวข้อง หากพร้อมแล้ว ไปอ่านพร้อมกันต่อได้เลย

สารบัญบทความ

ทำความรู้จักกับ CI/CD คืออะไร?

CI/CD ย่อมาจาก Continuous Integration และ Continuous Delivery/ContinuousDeployment เป็นกระบวนการที่มีเป้าหมายเพื่อทำให้การทำงานต่าง ๆ ตั้งแต่การ Merge Code ไปจนถึงการส่งมอบ Software เป็นไปอย่างอัตโนมัติทั้งหมด ช่วยให้กระบวนการส่งมอบงานมีความรวดเร็ว ซึ่ง CI/CD ประกอบไปด้วยการทำงานในส่วนของ CI และส่วนของ CD ดังนี้

Continuous Integration (CI)

Continuous Integration หรือ CI คือ กระบวนการที่ Developer แต่ละคนในทีมจะทำการ Merge หรือ Code Change ของตัวเองที่ได้มีการแก้ไขเข้าไปที่ Central Repository โดยทุกครั้งที่ Push Code ใหม่เข้ามา CI Server จะ Trigger Pipeline โดยอัตโนมัติ เพื่อทำการ Bulid, Test (Automate Test, Unit Test และ Integration Test) และ Validate ซึ่งกระบวนการทั้งหมดนี้ก็เพื่อเป็นการเช็กให้มั่นใจว่าการแก้ไขต่าง ๆ ที่เกิดขึ้นกับ Code นั้นจะไม่ไปกระทบกับการทำงานของ Software หรือ Application ที่กำลังพัฒนากันอยู่นั่นเอง

Continuous Delivery (CD) และ Continuous Deployment (CD)

Continuous Delivery และ Continuous Deployment (CD) คือ กระบวนการที่ช่วยให้การนำ Code หรือระบบที่พัฒนาขึ้นส่งไป Production ได้อย่างราบรื่น โดยกระบวนการนี้อาศัยการทำงานแบบอัตโนมัติเป็นหลัก เพื่อลดความผิดพลาดและเพิ่มความรวดเร็วในการปล่อยใช้งานระบบ

ในส่วนของความแตกต่างระหว่าง Continuous Delivery และ Continuous Deployment มีดังนี้

  • Continuous Deployment (CD) เป็นกระบวนการที่โฟกัสที่การทำงานแบบอัตโนมัติเต็มรูปแบบในทุกขั้นตอน ตั้งแต่การ Merge Code จาก Developer การ Test ไปจนถึงการ Production ที่จะดำเนินการโดยอัตโนมัติทั้งหมด จุดแข็งของวิธีการนี้คือทำให้ Software สามารถอัปเดตได้อย่างต่อเนื่องและรวดเร็ว
  • Continuous Delivery (CD) มีลักษณะการทำงานใกล้เคียงกับ Continuous Deployment คือ Code ที่ผ่านการพัฒนาและ Test จะสามารถนำขึ้น Production ได้ โดยความแตกต่างคือ เมื่อเกิดการ Deploy เข้าสู่ระบบจริงจะไม่ทำงานแบบอัตโนมัติ แต่ขึ้นอยู่กับการตัดสินใจของทีม หรือดำเนินการด้วยวิธี Manual Process ซึ่งเหมาะกับทีมที่ต้องการความยืดหยุ่นในการควบคุม Release หรือมีข้อกำหนดด้าน Compliance และ Governance

อ่านบทความดี ๆ เกี่ยวกับ API Integration ต่อได้เลย!

CI/CD ช่วย Developer ได้อย่างไรบ้าง?

CI/CD Pipeline ถือเป็นกลไกสำคัญที่เข้ามาเปลี่ยนแปลงวิธีการพัฒนาและส่งมอบ Software อย่างมีระบบ โดยอาศัย Automation ที่ครอบคลุมทุกขั้นตอนของ Software Development Lifecycle (SDLC) เริ่มตั้งแต่ Continuous Integration (CI) ที่บังคับให้ Developer ทำการ Merge Code เข้าสู่ Central Repository และให้ Pipeline ทำการ Build, Run Test และ Static Analysis แบบอัตโนมัติ ส่งผลให้ทีมได้รับ Feedback เร็ว ลดความเสี่ยงของ Merge Conflict และ Bug ที่สะสม

ขณะที่ Continuous Delivery และ Continuous Deployment จะต่อยอดด้วยการสร้าง Build Artifact ที่พร้อมใช้งานและส่งต่อสู่ Staging หรือ Production ได้อย่างต่อเนื่อง ลด Lead Time for Changes เพิ่ม Deployment Frequency และควบคุม Change Failure Rate ได้ดียิ่งขึ้น ทั้งหมดนี้เป็นรากฐานสำคัญที่ช่วยให้ทีม Development, Operation และ DevOps/SRE ทำงานร่วมกันได้อย่างมีประสิทธิภาพตามแนวคิด DevOps ที่สามารถส่งมอบซอฟต์แวร์ พัฒนา และปรับปรุงได้อย่างต่อเนื่อง

CI และ CD มีข้อแตกต่างกันอย่างไร?

สรุปแล้ว CI และ CD มีข้อแตกต่างกันอย่างไร หลายคนอาจจะยังมีข้อสงสัยถึงความแตกต่างระหว่างทั้ง 2 กระบวนการนี้อยู่บ้าง สิริซอฟต์เลยจะขอสรุปข้อแตกต่างโดยกระชับ ดังนี้

Continuous Integration (CI)

  • CI เป็นกระบวนการที่ช่วยให้เหล่า Developer สามารถ Integrate Code ที่ตัวเองพัฒนาลงไปยัง Main Repository ได้อย่างต่อเนื่อง
  • มีการ Automated Testing เพื่อยืนยันว่า Code ที่เขียนเพิ่มหรือแก้ไข ไม่ทำให้ระบบหลักเกิดปัญหา
  • แก้ปัญหาเรื่อง Code Conflict จากการที่ Developer หลายคนทำงานแยกกัน แล้วต้องนำ Code มารวมเข้าด้วยกัน
  • เป้าหมายหลักของ CI คือ ลดความเสี่ยงของการ Merge Code และสร้างความมั่นใจว่า Code ใน Repository มีคุณภาพและพร้อมใช้งาน

Continuous Delivery (CD : Delivery)

  • เป็นขั้นตอนถัดจาก CI ที่เน้นการทำให้ Software พร้อมสำหรับการ Deploy ได้ตลอดเวลา
  • Code ที่ผ่าน CI จะถูกนำไป Test เพิ่มเติม เช่น บน GitHub Actions หรือ Pipeline อื่น ๆ เพื่อค้นหา Bug อย่างอัตโนมัติ
  • ช่วยลดปัญหาการสื่อสารระหว่าง Developer และทีม Operations เพราะ Software อยู่ในสภาพที่สามารถส่งมอบต่อได้ทันที
  • เป้าหมายหลักของ CD Delivery ลดเวลาในการ Deploy เวอร์ชันใหม่ของระบบ เพื่อให้ทีมสามารถ Release ได้อย่างมั่นใจและรวดเร็ว

Continuous Deployment (CD : Deployment)

  • เป็นกระบวนการที่ทำการ Deploy Code จาก Repository ไปยัง Production แบบอัตโนมัติ End-to-End Automated ตั้งแต่ Build, Run Test จนถึง Deploy ทำให้การส่งมอบ Software มีความรวดเร็ว ปลอดภัย
  • ลูกค้าจะสามารถใช้งานฟีเจอร์ใหม่ได้ทันทีโดยไม่ต้องรอทีม Operation ทำงานแบบ Manual
  • ลดภาระงานซ้ำซ้อนของทีม Operation และลดความเสี่ยงจาก Human Error ในการ Deploy

CI/CD มีประโยชน์อะไรบ้าง?

ระบบ CI/CD ช่วยให้ Software Development เป็นไปอย่างรวดเร็วและมีประสิทธิภาพมากขึ้น โดยลดความผิดพลาดและเพิ่มคุณภาพของ Code ให้ดีขึ้น โดยประโยชน์ของ CI/CD มีดังนี้

  • ดูแลและอัปเดตระบบง่ายขึ้น การนำ CI/CD มาใช้ ทำให้สามารถตรวจสอบและติดตามปัญหาได้ในทุกขั้นตอนของการพัฒนา ไม่ว่าจะเป็นช่วง Build หรือการอัปเดต Application ที่มีอยู่แล้ว ส่งผลให้การบำรุงรักษาและอัปเดตทำได้อย่างตรงจุด รวดเร็ว และลดความเสี่ยงจาก Bug ที่ซ่อนอยู่
  • ลดค่าใช้จ่ายด้านการปฏิบัติงาน ลดความจำเป็นในการใช้ทรัพยากรบุคคลสำหรับการ Monitor แบบ Manual ทำให้องค์กรสามารถใช้ทรัพยากรที่มีไปกับงานที่สร้างคุณค่าเชิงกลยุทธ์มากกว่า
  • เพิ่มความน่าเชื่อถือในการทดสอบระบบ การเปลี่ยนแปลง Code ในแต่ละครั้งมักเป็นการแก้ไขเล็ก ๆ น้อย ซึ่งระบบ CI/CD จะทำการทดสอบอย่างต่อเนื่องและแม่นยำ ทำให้มั่นใจได้ว่าทุกการแก้ไขนั้นมีคุณภาพ และไม่ทำให้เกิดผลกระทบต่อระบบ
  • ลดความซ้ำซ้อนในการแก้ไข Code ระบบมีความสามารถในการ Merge Code จาก Developer หลายคนเข้าด้วยกัน และทำการ Automate Test ทันที ลดปัญหาการเกิด Conflict จากการ Merge Code เก่าและ Code ใหม่ อีกทั้งยังช่วยลดความเสี่ยงจากการแก้ไขที่ไม่ตรงกันได้อีกด้วย
  • ลดความซับซ้อนจากการทำงานแบบแยกส่วน การ Merge Code และการ Automate test ช่วยให้ทีมสามารถทำงานร่วมกันได้อย่างเป็นระบบมากขึ้น ลดอุปสรรคที่เกิดจากการพัฒนาที่แยกเป็นส่วน ๆ และเพิ่มประสิทธิภาพการทำงานแบบ Collaborative
  • ส่งงานได้เร็วยิ่งขึ้น ไม่จำเป็นต้องเสียเวลาในการตรวจสอบแบบ Manual Process ส่งผลให้กระบวนการพัฒนาสั้นลง และสามารถส่งมอบงานได้รวดเร็วยิ่งขึ้น

เครื่องมือ CI/CD ยอดนิยมที่คนส่วนใหญ่เลือกใช้

ปัจจุบันมี CI/CD tools ให้ Developer ได้เลือกใช้มากมายในตลาด แต่ CI/CD Tools ที่ได้รับความนิยมและเป็น Tools ที่คนเลือกใช้กันเป็นส่วนใหญ่ ได้แก่

  • Jenkins : ได้รับความนิยมเนื่องจากมี Open-Source และ Plugin Ecosystem ขนาดใหญ่ ทำให้ Developer สามารถปรับแต่ง Pipeline ได้อย่างอิสระผ่าน Jenkinsfile แต่ถึงแม้ว่า Jenkins จะเป็น CI/CD Tool ที่ฟรี แต่ก็มี Maintenance Overhead ค่อนข้างสูงพอสมควร
  • GitLab CI/CD : เป็น CI/CD Tools ที่คนส่วนใหญ่นิยมใช้ เพราะด้วยจุดเด่นในเรื่อง All-in-one DevOps Platform ที่ผนวกรวม Source Code Management, CI/CD, Registry และอื่น ๆ ไว้ในที่เดียว การกำหนดค่าผ่านไฟล์ .gitlab-ci.yml ทำให้ Pipeline as Code เป็นเรื่องง่ายขึ้น
  • GitHub Actions : เป็น Tools ที่มีจุดเด่นในด้านการเป็น Event-Driven Workflow Automation ที่ไม่จำกัดแค่ CI/CD แต่สามารถทำได้ทุกอย่างที่เกี่ยวกับ Repository Events และยังมี Marketplace ขนาดใหญ่สำหรับแชร์ Actions ที่ใช้ซ้ำกันได้
  • CircleCI : เป็น Cloud-Native CI/CD Platform ที่ขึ้นชื่อเรื่อง Performance และสะดวกในการ Configuration ผ่าน YAML มีฟีเจอร์เด่นอย่าง Orbs ซึ่งเป็น Reusable Package ของ Configuration ที่ช่วยลดความซับซ้อนของ Pipeline ได้เป็นอย่างดี และ Azure DevOps จาก Microsoft ที่นำเสนอโซลูชันแบบ End-to-End ตั้งแต่ Azure Boards, Repos, ไปจนถึง Azure Pipelines ที่รองรับการ Build และ Deploy ไปยังแพลตฟอร์มใดก็ได้ ไม่ใช่แค่บน Azure เท่านั้น

ยกตัวอย่างการทำงาน GitLab CI/CD

สำหรับใครที่อยากรู้ระบบการทำงานของเครื่องมือ CI/CD สิริซอฟต์จะยกตัวอย่างการทำงานของ GitLab CI/CD ว่ามีขั้นตอนอย่างไรบ้าง ดังนี้

  1. สร้างไฟล์กำหนดการทำงาน (.gitlab-ci.yml) : เป็นไฟล์หลักที่ GitLab จะอ่านโดยอัตโนมัติเมื่อมีการ Push และ Merge Code ขึ้นไป โดยไฟล์นี้เป็นตัวควบคุมลำดับการทำงานของ Pipeline
  2. กำหนดรายละเอียดใน .gitlab-ci.yml :
    • Image : ระบุ Docker Image ที่มี Dependencies สำหรับ Project
    • Cache : จัดการแคชเพื่อเร่งความเร็ว Pipeline (ใช้ได้เฉพาะใน project เดียวกัน)
    • Stages : ลำดับขั้นตอนของ Pipeline เช่น Install, Build, Deploy
    • Jobs :
      • Github-Push : ทำการ Mirror Repository ไปยัง GitHub
      • Install : ติดตั้ง Dependencies เช่น Yarn และจัดเก็บไฟล์สำคัญเป็น Artifacts เพื่อส่งต่อให้ขั้นตอนถัดไป
      • Build : ทำการ Build code สำหรับ Production โดยมี Dependencies ที่ต้องผ่านจากขั้นก่อนหน้า พร้อมเก็บ Artifacts
      • Deploy : ทำการ Deploy Code ไปยัง Production (เช่น Firebase Hosting) โดยใช้ตัวแปรระบบของ GitLab เช่น $CI_PIPELINE_ID และ $CI_BUILD_ID
  3. Push และ Merge Code : หลังจากสร้างไฟล์ .gitlab-ci.yml และแก้ไข Code ให้ Push ขึ้น GitLab และรวมเข้ากับ Branch Master
  4. ตรวจสอบ Pipeline บน GitLab
    • เข้าเมนู CI/CD > Pipeline เพื่อดูสถานะการทำงาน
    • Pipeline จะรันตาม Stages ที่กำหนดไว้ในไฟล์
  5. การจัดการ Pipeline ระหว่างรัน
    • หาก Pipeline รันเสร็จ จะขึ้นเป็นสถานะ Success
      สามารถกด Cancel เพื่อหยุด Pipeline ที่กำลังทำงานได้
    • หาก Pipeline ล้มเหลวหรือถูกยกเลิก สามารถกด Retry เพื่อให้ระบบรัน Pipeline ใหม่ได้ทันที

มี CI/CD การทำ Software Development ก็ไม่ยากอีกต่อไป

จะเห็นได้ว่า CI/CD เป็นตัวช่วยสำคัญสำหรับ Developer ที่จะทำให้การทำ Software Development นั้นรวดเร็วยิ่งขึ้น ลดการทำงานซ้ำซ้อน และส่งมอบงานได้อย่างมีประสิทธิภาพ ซึ่งปัจจุบันก็มี CI/CD Tools หลายตัวที่ได้รับความนิยมจาก Developer ไม่ว่าจะเป็น Jenkins, GitLab, GitHub Actions และ CircleCI ให้เลือกใช้ตาม Workflow ขององค์กร

หากคุณกำลังมองหาผู้ให้บริการด้านการทำ CI/CD ที่สิริซอฟต์ส่งมอบซอฟต์แวร์ด้วยกระบวนการ Build, Test และการปรับใช้แบบ Automatic พร้อมยกระดับ Strategy การเติบโตของธุรกิจด้วย DevOps และ Microservices ให้การปรับปรุงธุรกิจ การ Transform และ Risk Managing กลายเป็นเรื่องง่าย เพื่อให้ธุรกิจของคุณสามารถขยายตัวได้รวดเร็ว Release Product ได้ไวขึ้น ยกระดับประสบการณ์ของลูกค้า รักษาความสามารถในการแข่งขันในตลาดซอฟต์แวร์อย่างมีประสิทธิภาพ