LEVEL 1 · พื้นฐานที่ใช้จริง
Pipeline แรกของคุณ
ทฤษฎีพอแล้ว มาเขียน pipeline จริงกัน เราจะใช้ GitHub Actions เป็นตัวอย่างหลักตลอดเล่ม เพราะใกล้กับเล่ม Git ที่สุดและเริ่มฟรีได้ทันที แต่ทุกแนวคิดย้ายไปแพลตฟอร์มอื่นได้ (บทที่ 14 เทียบให้ครบ) — โครงสร้างเปลี่ยน แต่ความคิดเหมือนเดิม
3.1 ไฟล์เดียวที่ปลุกทุกอย่าง
ใน GitHub Actions คุณแค่สร้างไฟล์ YAML ไว้ในโฟลเดอร์ .github/workflows/ แล้ว push ขึ้นไป — GitHub จะเห็นและเริ่มรันให้เองทันที ไม่ต้องตั้งค่าเซิร์ฟเวอร์อะไรเลย นี่คือ pipeline ที่สมบูรณ์ที่สุดเท่าที่ใช้งานได้จริง:
# .github/workflows/ci.yml
name: CI
on: # เมื่อไรให้รัน — นี่คือ "trigger"
push:
branches: [main]
pull_request: # รันตอนเปิด/อัปเดต PR ด้วย
jobs:
test: # ชื่อ job (ตั้งเองได้)
runs-on: ubuntu-latest # รันบนเครื่อง Linux ที่ GitHub เตรียมให้
steps:
- uses: actions/checkout@v4 # 1. ดึงโค้ด repo ลงมาในเครื่อง runner
- uses: actions/setup-node@v4 # 2. ติดตั้ง Node.js
with:
node-version: 20
- run: npm ci # 3. ติดตั้ง dependencies
- run: npm test # 4. รันชุดทดสอบ — ถ้าพัง pipeline แดงทันที3.2 อ่าน YAML นี้ทีละชั้น
ทุกบรรทัดแมปกับลำดับชั้นในบทที่ 2 ตรง ๆ:
on:คือ event/trigger — บอกว่าให้ปลุก pipeline เมื่อ push เข้าmainหรือเมื่อมี PRjobs:ใต้นั้นคือรายการ job — ตอนนี้มีตัวเดียวชื่อtestruns-on:เลือก runner — เครื่องเปล่า ๆ ที่ GitHub สร้างใหม่ให้ทุกครั้งsteps:คือ step ที่รันเรียงจากบนลงล่าง มีสองแบบ:uses:เรียกใช้ "action" สำเร็จรูปที่คนอื่นเขียนไว้ และrun:สั่ง shell command ตรง ๆ
หัวใจอยู่ที่ step สุดท้าย: ถ้า npm test คืน exit code ไม่เป็นศูนย์ (เทสต์ตก) step นั้นล้มเหลว job ก็ล้มเหลว และ pipeline ขึ้นสถานะแดง — บน PR คุณจะเห็นเครื่องหมาย ✕ ทันที นี่แหละคือ "fail loud" ในทางปฏิบัติ
3.3 การเริ่มสะอาดทุกครั้งคือฟีเจอร์ ไม่ใช่บั๊ก
สังเกตว่าทำไมต้องมี checkout และ setup-node ทุกครั้ง — เพราะ runner เกิดใหม่จากศูนย์ทุกการรัน ไม่มีโค้ด ไม่มี Node ติดมาก่อน นี่คือสิ่งที่ทำให้ pipeline "ทำซ้ำได้": ไม่มีของค้างจากการรันก่อนหน้ามาปนเปื้อนผล สิ่งที่ผ่านวันนี้จะผ่านเหมือนกันในอีกหกเดือน
🧭 ลองเองได้ใน 2 นาที — เอา repo ที่มี
npm testอยู่แล้ว สร้างไฟล์.github/workflows/ci.ymlตามด้านบน แล้วgit add→commit→pushเปิดแท็บ Actions บน GitHub คุณจะเห็น pipeline เริ่มหมุนทันที — นี่คือ git push จากเล่มที่แล้ว ที่ตอนนี้ "เกิดอะไรต่อ" แล้วจริง ๆ
✅ สรุปบทที่ 3 — pipeline = ไฟล์ YAML ใน
.github/workflows/·on:กำหนด trigger,jobs:→steps:กำหนดงาน · step มีสองแบบuses:(action สำเร็จรูป) และrun:(คำสั่ง shell) · runner เริ่มสะอาดทุกครั้งจึงต้อง checkout/setup ใหม่ — ความสะอาดนี้คือรากของการทำซ้ำได้ · เทสต์ตก = exit code ไม่เป็นศูนย์ = pipeline แดง