LEVEL 2 · ระดับกลาง
Matrix & การขนานงาน
ถ้าโปรแกรมของคุณต้องทำงานได้บน Node 18, 20 และ 22 ทั้งบน Linux และ Windows คุณจะเขียน job ซ้ำกัน 6 อันไหม? ไม่ต้อง — matrix คือเครื่องมือที่สร้างชุด job ขนานให้อัตโนมัติจากการประกาศมิติเพียงไม่กี่บรรทัด
7.1 Matrix — ทดสอบหลายมิติพร้อมกัน
jobs:
test:
strategy:
fail-fast: false # ช่องหนึ่งตก ไม่ยกเลิกช่องอื่น — เห็นภาพครบ
matrix:
node: [18, 20, 22]
os: [ubuntu-latest, windows-latest]
runs-on: ${{ matrix.os }} # แต่ละ job หยิบค่าจากช่องของตัวเอง
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}7.2 fail-fast — เห็นภาพครบ หรือ ประหยัดทรัพยากร
fail-fast: true (ค่าเริ่มต้น) หมายถึง "พอช่องใดช่องหนึ่งตก ให้ยกเลิกช่องที่เหลือทันที" — ประหยัดเวลา/เครื่อง เหมาะตอนแค่อยากรู้ว่า "ผ่านหรือไม่ผ่าน" ส่วน fail-fast: false ปล่อยให้ทุกช่องรันจบ เหมาะตอน debug เพราะคุณอยากเห็นว่า พังเฉพาะ Windows + Node 18 หรือพังทุกที่ — ข้อมูลนี้ชี้ต้นตอได้ทันที
7.3 ความเร็วรวมของ pipeline
เพราะ job ขนานกัน เวลารวมของ pipeline ไม่ใช่ผลบวกของทุก job แต่เท่ากับ เส้นทางที่ยาวที่สุด (critical path) เหมือนหลายคนช่วยกันทำงานพร้อมกัน งานเสร็จเมื่อคนที่ช้าที่สุดเสร็จ การออกแบบ pipeline ให้เร็วจึงเป็นเรื่องของ "แตกงานอิสระให้ขนานกันให้มากที่สุด แล้วไล่บีบ job ที่อยู่บนเส้นทางวิกฤต"
✅ สรุปบทที่ 7 — matrix ขยายมิติที่ประกาศ (เช่น node × os) เป็นชุด job ขนานอัตโนมัติ ครอบคลุมหลายสภาพแวดล้อมด้วยโค้ดครั้งเดียว ·
fail-fast: falseให้ทุกช่องรันจบเพื่อเห็นภาพครบตอน debug · เวลารวมของ pipeline = เส้นทางที่ยาวที่สุด ไม่ใช่ผลบวก — เร่งได้ด้วยการขนานงานอิสระ