ข้ามไปยังเนื้อหา
Tayakorn
CI/CD Handbook

CI/CD Handbook

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 หรือเมื่อมี PR
  • jobs: ใต้นั้นคือรายการ job — ตอนนี้มีตัวเดียวชื่อ test
  • runs-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 addcommitpush เปิดแท็บ 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 แดง

อ่านแบบเต็มเล่ม