เทคนิคเพิ่มประสิทธิภาพ 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 ไม่จำเป็นต้องเป็นภาระอีกต่อไป!