DEV Community

Cover image for GitHub Actions Toàn Tập: "Bế" Code Lên Production Nhanh Như Chớp!
ITPrep
ITPrep

Posted on • Originally published at itprep.com.vn

GitHub Actions Toàn Tập: "Bế" Code Lên Production Nhanh Như Chớp!

Chào anh em! Nếu anh em đang để source code trên GitHub mà vẫn dùng các công cụ CI/CD bên ngoài, hoặc tệ hơn là... tự build và deploy bằng tay qua FTP/SSH, thì anh em đang bỏ lỡ một "vũ khí" cực kỳ bá đạo: GitHub Actions.

Không cần setup server rườm rà như Jenkins, mọi thứ đều được định nghĩa bằng file YAML và chạy thẳng trên hạ tầng của GitHub. Hôm nay, cùng mình mổ xẻ cách tối ưu hóa CI/CD với GitHub Actions từ cơ bản đến "Pro" nhé!

🧩 6 Thuật Ngữ Cốt Lõi Cần Nhớ

Trước khi lao vào code, anh em chỉ cần nhớ đúng 6 từ khóa này:

  1. Workflow: Toàn bộ quy trình CI/CD (được định nghĩa trong 1 file .yml).
  2. Event: Cò súng bóp phát chạy luôn (vd: push code, tạo pull_request, hoặc hẹn giờ schedule).
  3. Job: Một tập hợp các bước (Step). Các Job mặc định chạy song song, trừ khi bạn dùng needs để bắt chúng chạy tuần tự.
  4. Step: Từng tác vụ cụ thể (chạy 1 script hoặc gọi 1 Action).
  5. Action: Các cụm lệnh được đóng gói sẵn (vd: actions/checkout@v4 để clone code về).
  6. Runner: Cái máy chủ (Ubuntu, Windows, macOS) sẽ thực thi code của bạn.

💻 Viết Workflow CI/CD Đầu Tiên

Ví dụ anh em có một project Node.js. Mình muốn cứ push code lên nhánh main là tự động cài thư viện, chạy test và build.

Tạo file .github/workflows/ci.yml:

name: CI/CD Pipeline for Node.js App
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build-and-test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Node.js environment
        uses: actions/setup-node@v4
        with:
          node-version: '18'

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm test

      - name: Build project
        run: npm run build
Enter fullscreen mode Exit fullscreen mode

🔥 Lên Trình "Pro": Tối Ưu Hóa GitHub Actions

Viết script cho nó chạy thì dễ, nhưng làm sao để chạy Nhanh - Rẻ - An toàn mới là vấn đề. Dưới đây là 3 kỹ thuật anh em bắt buộc phải biết:

1. Dùng Caching Để Tăng Tốc Build

Mỗi lần chạy lại đi tải lại node_modules cả trăm MB thì quá tội cho runner. Hãy dùng actions/cache để lưu lại:

      - name: Cache Node.js modules
        uses: actions/cache@v3
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-node-
Enter fullscreen mode Exit fullscreen mode

2. Matrix Builds (Test Đa Môi Trường)

Bạn muốn test xem code của mình có chạy ổn trên cả Node 16, 18 và 20 không? Không cần viết 3 cái Job đâu, hãy dùng matrix:

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [16, 18, 20]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: npm test
Enter fullscreen mode Exit fullscreen mode

GitHub sẽ tự đẻ ra 3 job chạy song song cho 3 phiên bản Node khác nhau!

3. Không Hardcode Mật Khẩu (Secrets)

Cái này là lỗi sơ đẳng nhưng hậu quả lại cực kỳ nghiêm trọng. Đừng bao giờ vứt API Key hay Password DB vào file YAML. Hãy vào kho lưu trữ trên GitHub -> Settings -> Secrets and variables -> Actions để lưu.

Sau đó, gọi nó ra trong file YAML một cách an toàn:
password: ${{ secrets.DB_PASSWORD }}

🥊 GitHub Actions so với Jenkins & GitLab CI

  • Dùng GitHub Actions khi: Code của bạn đang để trên GitHub. Bạn cần CI/CD setup siêu tốc, không rảnh để quản lý một con server riêng. Mức Free-tier của GitHub khá hào phóng cho project nhỏ & vừa.
  • Dùng Jenkins khi: Bạn cần kiểm soát hạ tầng 100%, tự host server và có một mớ logic custom dị biệt mà GitHub Actions chưa hỗ trợ tốt.
  • Dùng GitLab CI khi: Bạn sử dụng GitLab. (GitLab CI/CD tích hợp cực kỳ xuất sắc với hệ sinh thái của họ).

🎯 Tổng kết

Tự động hóa không làm chúng ta lười đi, nó giúp chúng ta có thêm thời gian để giải quyết những bài toán khó hơn. Việc thành thạo GitHub Actions sẽ biến quá trình deploy từ một "nỗi ám ảnh" mỗi tối thứ Sáu thành một việc dễ dàng chỉ bằng một cú git push.

Anh em đang dùng CI/CD tool nào cho project của mình? Có bí kíp tối ưu thời gian chạy Action nào hay ho không? Chia sẻ ở phần comment nhé! 👇

🔥 Khám phá thêm: Nếu anh em quan tâm đến việc tối ưu kiến trúc hệ thống, DevOps hay các mẹo Backend, hãy ghé thăm blog ITPrep để đọc thêm nhiều bài viết thực chiến cực chất!


Nguồn tham khảo: ITPrep - Hướng Dẫn Chuyên Sâu về GitHub Actions: Tối Ưu Hóa Quy Trình CI/CD

Top comments (0)