เทคนิคเพิ่มประสิทธิภาพ GitHub Workflow ให้รวดเร็วและประหยัด
ในการพัฒนาซอฟต์แวร์สมัยใหม่ CI/CD กลายเป็นหัวใจสำคัญที่ขาดไม่ได้ และ GitHub Actions ก็เป็นเครื่องมือยอดนิยมที่ช่วยให้เราทำระบบอัตโนมัติได้ง่ายขึ้นมาก
แต่เมื่อโปรเจกต์ใหญ่ขึ้น จำนวน Workflow มากขึ้น ปัญหาที่ตามมาคือ “ความช้า” และ “ค่าใช้จ่าย” ที่พุ่งสูงขึ้น บทความนี้จะพาทุกคนไปดูเทคนิคการเพิ่มประสิทธิภาพให้ GitHub Workflow ของคุณทำงานได้เหมือนติดเทอร์โบครับ
⚡ 1. ใช้ Caching ให้เป็นประโยชน์
การติดตั้ง dependencies ใหม่ทุกครั้งที่รัน Workflow เป็นสิ่งที่กินเวลามากที่สุด โดยเฉพาะในโปรเจกต์ Node.js หรือ Python
- actions/cache: ใช้สำหรับเก็บ cache ของ node_modules, build artifacts หรือ dependencies ต่างๆ
- Native Cache: ปัจจุบัน
actions/setup-node,actions/setup-pythonและactions/setup-javaมีฟีเจอร์ caching ในตัวแล้ว เพียงแค่ระบุcache: 'npm'หรือcache: 'pip'ก็ช่วยลดเวลาได้มหาศาล
🚀 2. ขนานการทำงานด้วย Matrix Strategy
หากคุณต้องรันเทสต์ในหลายเวอร์ชันของ Node.js หรือหลาย OS แทนที่จะรันทีละอัน ให้ใช้ Matrix Strategy เพื่อรันพร้อมกัน (Parallel)
strategy:
matrix:
node-version: [18.x, 20.x, 22.x]
os: [ubuntu-latest, windows-latest]
การทำแบบนี้จะช่วยให้ Workflow เสร็จไวขึ้น เพราะ GitHub จะแจกจ่ายงานไปยัง Runner หลายตัวพร้อมกัน
🎯 3. จำกัดการรันด้วย Path Filtering
ไม่จำเป็นต้องรัน Workflow ทั้งหมดทุกครั้งที่มีการ Push โค้ด หากคุณแก้ไขแค่ไฟล์ในโฟลเดอร์ docs/ คุณอาจจะไม่ต้องรัน Unit Test ของโค้ดหลัก
on:
push:
paths:
- 'src/**'
- '!docs/**'
การใช้ paths ช่วยลดการทำงานที่ไม่จำเป็นและประหยัด Action minutes ได้อย่างดีเยี่ยม
🛑 4. จัดการ Concurrency ให้เหมาะสม
เมื่อมีการ Push โค้ดรัวๆ (เช่น ในระหว่างการทำ Debug) GitHub จะรัน Workflow ใหม่ทับซ้อนกันไปเรื่อยๆ ซึ่งสิ้นเปลืองทรัพยากร
เราสามารถใช้ concurrency เพื่อยกเลิก (cancel) งานเก่าที่ยังรันไม่เสร็จเมื่อมีงานใหม่เข้ามาได้:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
🏗️ 5. สร้าง Composite Actions เพื่อใช้ซ้ำ
หากคุณมีชุดคำสั่งที่ต้องเขียนซ้ำๆ ในหลาย Workflow แทนที่จะ Copy-Paste ให้สร้างเป็น Composite Action
- ช่วยให้ดูแลรักษาง่ายขึ้น (Single point of truth)
- Workflow หลักจะดูสะอาดและอ่านง่ายขึ้น
- ลดความผิดพลาดในการเซ็ตอัพ Environment
💡 สรุป
การปรับแต่ง GitHub Actions ไม่ใช่แค่เรื่องของความเร็ว แต่คือการสร้าง Developer Experience (DX) ที่ดีให้กับทีม เมื่อ Workflow ไว ทีมก็จะได้ Feedback ที่เร็ว และส่งมอบงานได้บ่อยขึ้นโดยไม่ต้องกังวลเรื่องค่าใช้จ่ายที่บานปลายครับ!
ลองนำเทคนิคเหล่านี้ไปปรับใช้กับโปรเจกต์ของคุณดูนะครับ แล้วจะพบว่า CI/CD ไม่จำเป็นต้องเป็นภาระอีกต่อไป!