aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
SAVED POSTS
aedev.net
  • Trang chủ
  • AI
  • Mobile
  • Flutter
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
No Result
View All Result
aedev.net
No Result
View All Result
Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

GitHub Actions: kiểm tra pull request Node.js trước khi merge

Suong Nguyen by Suong Nguyen
21/10/2026
in DevOps
0
585
SHARES
3.2k
VIEWS
Summarize with ChatGPTShare to Facebook

“Máy mình chạy được” chưa trả lời câu hỏi liệu một pull request có chạy được từ checkout sạch hay không. Với team nhỏ, một workflow kiểm tra ngắn và đáng tin thường hữu ích hơn một pipeline nhiều bước nhưng không ai hiểu vì sao thất bại.

Bài này hướng dẫn một cấu hình tham khảo cho repository Node.js dùng npm. Tài liệu được kiểm tra ngày 21/10/2026; ví dụ chọn Node.js 24, không mặc định mọi dự án đều nâng lên phiên bản đó. Hãy dùng phiên bản mà repository của bạn hỗ trợ.

1. Thống nhất lệnh chạy ở local trước

Repository cần commit package-lock.json và định nghĩa ba script lint, test, build trong package.json. Nội dung cụ thể phụ thuộc công cụ của dự án. Chạy lần lượt:

npm ci
npm run lint
npm test
npm run build

Nếu test đang bật chế độ watch, hãy cấu hình lệnh chạy một lần cho CI theo tài liệu test runner đang dùng. Nếu dự án không có bước build, bỏ bước build trong workflow một cách có chủ đích. Không thêm --if-present chỉ để biến một script bị quên thành trạng thái xanh.

Theo tài liệu npm ci, lệnh yêu cầu lockfile hiện có và báo lỗi khi dependency trong lockfile không khớp package.json. Đây là kiểm tra hữu ích cho một bản checkout sạch, chứ không chỉ là lựa chọn cài package nhanh hơn.

2. Thêm workflow nhỏ và đọc được

Tạo file .github/workflows/quality.yml trong repository bạn muốn kiểm tra:

name: Quality checks

on:
  pull_request:
  push:
    branches: [main]

permissions:
  contents: read

jobs:
  quality:
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - uses: actions/checkout@v6
      - uses: actions/setup-node@v7
        with:
          node-version: '24'
          cache: npm
      - name: Install dependencies
        run: npm ci
      - name: Lint
        run: npm run lint
      - name: Test
        run: npm test
      - name: Build
        run: npm run build

Các major version của action trong ví dụ được đối chiếu với hướng dẫn Node.js của GitHub. Khi áp dụng vào repository có chính sách pin commit SHA hoặc runner riêng, hãy theo chính sách đó và kiểm tra yêu cầu runner của từng action.

Workflow này dành cho dự án npm tại thư mục gốc. Nếu mã nằm trong apps/web, bạn cần đặt working directory và cache dependency path tương ứng. Đừng chỉ đổi đường dẫn của bước test rồi để bước install chạy nhầm thư mục.

3. Hiểu cache đang giải quyết việc gì

Trong setup-node, cấu hình cache npm hỗ trợ dùng lại dữ liệu của package manager. Nó không thay thế npm ci, cũng không chứng minh dependency đã cài trong một lần chạy trước còn phù hợp.

Khi CI lỗi cài package, trước tiên hãy đọc lỗi lockfile, phiên bản Node và cấu hình registry. Xóa cache có thể giúp điều tra một số lỗi, nhưng không sửa được việc repository quên commit lockfile mới.

4. Chạy thử bằng một pull request nhỏ

Bạn có thể thêm một test thuần cho một hàm đang có, rồi xác nhận ba điều:

  1. Pull request tạo đúng một lượt kiểm tra mà team mong đợi.
  2. Khi chủ động đổi assertion thành sai, bước test chuyển đỏ và log chỉ ra assertion đó.
  3. Khi sửa lại, workflow chạy qua cả build, không chỉ dừng ở test.

Đây là quy trình kiểm chứng đề xuất. Ví dụ trong bài chưa được chạy trên repository của bạn; trạng thái cuối cùng cần được xác nhận từ lượt Actions thực tế. Nếu test đụng dịch vụ bên ngoài, hãy chuẩn bị môi trường test phù hợp trước khi coi lỗi mạng là lỗi của pull request.

5. Phân biệt workflow chạy được và quy tắc merge

Một check xanh cung cấp bằng chứng cho những lệnh thực sự đã chạy. Nó không tự nói rằng mọi hành vi của sản phẩm đã được kiểm tra. Một workflow được khai báo cũng chưa đủ nếu nhánh đích vẫn cho merge mà không yêu cầu check đó.

Sau khi tên check ổn định, cấu hình ruleset hoặc branch protection theo quy trình của team. Đọc tài liệu nhánh được bảo vệ để hiểu required status checks và quyền có thể bỏ qua quy tắc.

Lỗi thường gặp

  • Local xanh, CI đỏ: so sánh Node, biến môi trường, chữ hoa/thường trong tên file và khả năng chạy từ checkout sạch.
  • CI không kết thúc: kiểm tra test runner có đang watch hoặc giữ kết nối mở không.
  • Check xanh nhưng không thấy test: mở log và tìm số test thực sự chạy; exit code 0 của một script rỗng không phải bằng chứng kiểm thử.

Bắt đầu bằng các lệnh mà team có thể chạy lại ở local. Khi workflow ổn định, bạn mới nên thêm ma trận phiên bản, chia job hoặc tối ưu cache theo nút thắt đã đo.

Nguồn tham khảo

  • GitHub: Building and testing Node.js.
  • npm: npm ci.
  • actions/setup-node.
  • GitHub: About protected branches.
Tags: CI/CDGitHub ActionsNode.js
SummarizeShare234
Suong Nguyen

Suong Nguyen

Related Stories

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

Docker Compose: container đã chạy chưa chắc database đã sẵn sàng

by Suong Nguyen
22/10/2026
0

Dùng healthcheck và điều kiện depends_on để tách thứ tự khởi động, khả năng nhận kết nối và bước migration.

Minh họa pipeline CI/CD từ commit đến deploy cho team nhỏ

CI/CD cơ bản cho team dev nhỏ

by admin
02/07/2026
0

CI/CD giúp team nhỏ giảm lỗi release bằng cách tự động hóa kiểm thử, build và deploy theo một quy trình có thể lặp lại.

Next Post
Minh họa phát triển ứng dụng mobile đa nền tảng với Flutter

FutureBuilder trong Flutter: đừng tạo Future mới trong build

0 0 votes
Article Rating
Subscribe
Login
Notify of
guest
guest
0 Comments
Oldest
Newest Most Voted
AE Dev

AE Dev mang đến các bài viết về lập trình, mobile app, backend, frontend, WordPress và công nghệ, phù hợp cho developer muốn học hỏi và cập nhật kiến thức thực tế.

Recent Posts

  • React Native: tránh bàn phím che form với KeyboardAvoidingView và ScrollView
  • Phỏng vấn JavaScript: giải thích event loop, microtask và async/await
  • Deep link mobile an toàn: đúng domain chưa đủ, còn route và quyền đọc

Categories

  • AI
  • Backend
  • Đánh giá
  • DevOps
  • Flutter
  • Hướng dẫn
  • Lập trình Mobile
  • Phỏng vấn
  • React Native
  • Uncategorized

Weekly Newsletter

  • Buy JNews
  • Support Forum
  • Pre-sale Question
  • Contact Us

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In
No Result
View All Result
  • Trang chủ
  • AI
  • Mobile
  • React Native
  • Backend
  • DevOps
  • Hướng dẫn
  • Flutter

© 2026 AE Dev - Blog công nghệ, lập trình và chia sẻ kiến thức IT.

wpDiscuz
0
0
Would love your thoughts, please comment.x
()
x
| Reply