

GitHub Actions là công cụ tự động hóa mạnh mẽ tích hợp trực tiếp trong GitHub, cho phép lập trình viên xây dựng pipeline CI/CD (Continuous Integration / Continuous Delivery) mà không cần thiết lập server riêng. Bài viết này hướng dẫn bạn từ nền tảng lý thuyết đến triển khai thực tế pipeline CI/CD đầu tiên trên dự án cá nhân.
CI/CD Là Gì? Tại Sao Cần Thiết?
CI (Continuous Integration) là việc tự động build và test code mỗi khi có commit mới vào repository. CD (Continuous Delivery/Deployment) là việc tự động triển khai code lên môi trường staging hoặc production sau khi test đạt yêu cầu. Theo Wikipedia, CI là thực hành hợp nhất bản sao công việc của tất cả lập trình viên vào một đường ống xây dựng nhiều lần trong ngày.
Trước khi CI/CD phổ biến, lập trình viên phải tự build, test và deploy bằng tay — dẫn đến lỗi môi trường “chạy được trên máy tôi mà không chạy ở production”, chậm trễ triển khai, và stress cho team. CI/CD loại bỏ những rủi ro này hoàn toàn.
GitHub Actions Hoạt Động Như Thế Nào?
Core Concepts — Các khái niệm cơ bản
- Workflow: File YAML định nghĩa toàn bộ quy trình tự động hóa, đặt tại
.github/workflows/xxx.ymltrong repository. - Job: Tập hợp các bước (steps) chạy trên một runner, có thể chạy song song hoặc tuần tự.
- Step: Một tác vụ cụ thể trong job — checkout code, cài dependencies, chạy test…
- Runner: Máy tính (server) thực thi workflow. Có GitHub-hosted (do GitHub cung cấp) hoặc self-hosted (tự quản lý).
- Action: Đơn vị tái sử dụng trong workflow — có thể dùng từ GitHub Marketplace hoặc tự tạo riêng.

Viết Workflow CI/CD Đầu Tiên
Tạo file .github/workflows/ci.yml trong repository GitHub của bạn. Dưới đây là workflow mẫu đơn giản nhất.
Workflow mẫu: Build và Test
Workflow này tự động chạy mỗi khi có commit vào branch main hoặc tạo pull request:
name: CI Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
- name: Build project
run: npm run build
Workflow mẫu: Deploy lên Production
name: Deploy Production
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Deploy via SSH
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/app
git pull origin main
npm ci
npm run build
pm2 restart app
Triggers Và Events
GitHub Actions hỗ trợ nhiều trigger (sự kiện kích hoạt workflow) khác nhau:
- on: push: Chạy khi có commit đẩy lên branch — phổ biến nhất cho CI.
- on: pull_request: Chạy khi tạo PR — kiểm tra code trước khi merge vào main.
- on: schedule: Chạy theo lịch cron (ví dụ: nightly build, weekly report).
- on: workflow_dispatch: Cho phép chạy thủ công từ giao diện GitHub — hữu ích khi cần test.
- on: release: Chạy khi tạo release mới — tự động deploy bản phát hành.
- on: [push, pull_request]: Chạy trên nhiều event cùng lúc.
Secrets: Quản Lý Thông Tin Bí Mật
Không bao giờ đặt API keys, passwords, tokens, hay database URLs trực tiếp trong file YAML. Sử dụng GitHub Secrets — được mã hóa và chỉ có thể truy cập trong workflow context:
Thêm Secrets vào Repository
Vào Repository Settings > Secrets and variables > Actions > New repository secret. Thêm từng biến cần thiết.
Sử dụng Secrets trong workflow
env:
DATABASE_URL: ${{ secrets.DB_URL }}
API_KEY: ${{ secrets.API_KEY }}
JWT_SECRET: ${{ secrets.JWT_SECRET }}
Các secrets tự động bị ẩn trong logs. Nếu bạn echo một secret, GitHub sẽ thay bằng ***.
Caching Để Tăng Tốc Build
Reinstalling dependencies mỗi lần chạy workflow tốn thời gian quý báu. Dùng actions/cache action để lưu cache giữa các runs:
- name: Cache node_modules
uses: actions/cache@v4
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('package-lock.json') }}
restore-keys: ${{ runner.os }}-node-
Cache key dựa trên nội dung package-lock.json — chỉ thay đổi khi dependencies thay đổi. Điều này giúp các builds sau chỉ mất vài giây thay vì vài phút.
Monitoring Và Debugging Workflow
Khi workflow thất bại hoặc hành vi bất thường:
- Xem log chi tiết: Click vào workflow run trên GitHub > Click vào job thất bại > Xem từng step để tìm lỗi.
- Re-run workflow: Click “Re-run jobs” để test lại, hoặc re-run chỉ job thất bại.
- Local testing: Dùng
act(GitHub Actions locally) để chạy workflow trên máy — debug nhanh hơn nhiều so với chạy trên GitHub. - Debug mode: Thêm
ACTIONS_STEP_DEBUGsecret với giá trịtrueđể có log chi tiết hơn.
Kết Luận
GitHub Actions là công cụ CI/CD mạnh mẽ, miễn phí cho hầu hết dự án open-source (2.000 phút/tháng trên runners GitHub-hosted) và giá rẻ cho repository private. Bắt đầu với workflow đơn giản nhất (build + test), sau đó mở rộng dần sang deploy, caching, linting, và monitoring. Mỗi project trên GitHub đều nên có ít nhất một workflow CI đảm bảo chất lượng code trước khi merge vào branch chính.
Tham khảo: GitHub Docs – Understanding GitHub Actions, Atlassian – GitHub Actions Tutorial, DigitalOcean – CI Pipeline with GitHub Actions.
