Phần 4 — Matrix builds, Caching và Artifacts
Ý kiến
0
Chưa có ý kiến nào. Hãy là người đầu tiên chia sẻ!
Chưa có ý kiến nào. Hãy là người đầu tiên chia sẻ!
Pipeline production Next.js → Docker → K8s với cache image, manual approval. Tổng kết best practices và kỹ thuật debug (CI Lint, visualizer, CI_DEBUG_TRACE).
Khai báo environment để GitLab theo dõi deployments, có lịch sử và nút rollback. Review Apps — tính năng signature: mỗi MR tự deploy lên môi trường tạm.
Tái sử dụng pipeline giữa nhiều dự án với include (local, project, template, remote), kế thừa job với extends (hidden job), và YAML anchors.
Series GitHub Actions Toàn Tập — 8 phần:
Phần 1 — Tổng quan: CI/CD, GitHub Actions và các khái niệm cốt lõi
Phần 4 — Matrix builds, Caching và Artifacts ← bạn đang đọc
Phần 5 — Self-hosted Runner: cài đặt, security, auto-scaling
Pipeline chậm = trải nghiệm dev tệ. Phần này gộp ba kỹ thuật bắt buộc phải biết: matrix builds để chạy song song nhiều combination (OS × ngôn ngữ × version), cache để tận dụng lại artifact giữa các pipeline run (đặc biệt node_modules và Docker layer), và artifacts để truyền file giữa các job trong cùng pipeline mà không cần build lại.
Muốn test code trên nhiều Node version cùng lúc:
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node: [18, 20, 22]
exclude:
- os: windows-latest
node: 18
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- run: npm ci && npm test
Workflow trên tạo 8 job song song (3 OS × 3 Node − 1 exclude). fail-fast: false cho phép các job khác chạy tiếp khi một job fail — cần thiết để debug đầy đủ.
Cache giúp tái sử dụng data giữa các lần chạy workflow (vd: node_modules, ~/.gradle, Docker layers). Với npm/yarn/pnpm, action setup-node đã bật cache sẵn:
- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm' # hoặc 'npm', 'yarn'
Trường hợp tự cache:
- uses: actions/cache@v4
with:
path: |
~/.cache/pip
.venv
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
Artifact là file/folder bạn muốn lưu lại sau khi job kết thúc — để job khác dùng, hoặc để download về máy.
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm run build
- uses: actions/upload-artifact@v4
with:
name: build-output
path: dist/
retention-days: 7
deploy:
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/download-artifact@v4
with:
name: build-output
path: dist/
- run: ./deploy.sh dist/
Job deploy nhận lại đúng folder dist/ từ job build — không cần build lại.
Trong phần này bạn đã nắm:
Matrix sinh job song song theo cartesian product; exclude để bỏ combo không cần; fail-fast: false để job khác chạy tiếp khi 1 job fail.
Cache built-in qua actions/setup-node với cache: pnpm/npm/yarn; tự cache qua actions/cache@v4 với key + restore-keys dùng hashFiles().
Artifacts: upload qua actions/upload-artifact@v4, download qua actions/download-artifact@v4 — truyền data giữa job build và deploy.
Đặt retention-days cho artifact để tránh tốn storage; mặc định 90 ngày là quá dài cho hầu hết use case.
Trong Phần 5, ta đi vào chủ đề được hỏi nhiều nhất: cài self-hosted runner trên server riêng — từ chuẩn bị máy, cài service, đến quy tắc bảo mật bắt buộc khi vận hành.
Phần 5: Self-hosted Runner: cài đặt, security, auto-scaling →