GitHub Actions: Xây Dựng Pipeline CI/CD Hoàn Chỉnh Cho Developer

GitHub Actions: Xây Dựng Pipeline CI/CD Hoàn Chỉnh Cho Developer

Đội ngũ developer đang làm việc với CI/CD pipeline trên laptop
Đội ngũ developer đang làm việc với CI/CD pipeline trên laptop

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.yml trong 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.
Giao diện GitHub Actions workflow với các job đang chạy trên repository
Giao diện GitHub Actions workflow với các job đang chạy trên repository

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_DEBUG secret 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.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

FastAPI: Huong Dan Xay Dung API Hieu Suat Cho Developer Python

FastAPI: Huong Dan Xay Dung API Hieu Suat Cho Developer Python FastAPI la mot framework web moi va manh me duoc xay dung de tao cac API REST voi Python….

Xem thêm

Elixir Phoenix: Framework Web Hiệu Suất Cao Cho Realtime

Elixir Phoenix: Framework Web Hiệu Suất Cao Cho Realtime Elixir Phoenix là framework web hiệu suất cao nhất trên nền tảng Erlang VM (BEAM). Với mô hình actor nhẹ và…

Xem thêm

SQLite Performance Tuning: Tối Ưu Cơ Sở Dữ Liệu Nhẹ Cho Ứng Dụng

SQLite là một trong những hệ quản trị cơ sở dữ liệu được sử dụng rộng rãi nhất trên thế giới, được tích hợp sẵn trong mọi smartphone hiện đại…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất