Chỉ 5 phút để kích hoạt Renovate Bot trên GitHub
Để bắt đầu với Renovate, bạn không cần phải setup server hay duy trì hạ tầng phức tạp. Cách nhanh nhất là sử dụng GitHub App chính chủ. Chỉ cần 3 bước đơn giản là bot sẽ bắt đầu làm việc ngay:
- Truy cập GitHub Marketplace – Renovate.
- Nhấn Install và chọn những repository bạn muốn bot quét mã nguồn.
- Đợi vài phút, Renovate sẽ gửi một Configure Renovate PR. PR này chứa file cấu hình
renovate.json. Bạn chỉ cần merge nó vào branch chính là xong.
Sau khi kích hoạt, bot sẽ tự động rà soát các file như package.json, go.mod, requirements.txt hay Dockerfile. Nếu phát hiện thư viện lỗi thời, nó sẽ tự tạo Pull Request (PR) để nâng cấp cho bạn.
Tại sao mình chọn Renovate thay vì Dependabot?
Trước đây khi quản lý dự án Node.js với hơn 200 dependency, mỗi lần chạy npm audit là mình lại thấy “choáng” vì danh sách lỗi bảo mật dài dằng dặc. Ban đầu mình dùng Dependabot, nhưng công cụ này có một nhược điểm chí mạng: nó tạo ra quá nhiều PR đơn lẻ. Sáng ngủ dậy thấy 20 cái email thông báo cho 20 thư viện nhỏ xíu là đủ thấy nản lòng.
Renovate giải quyết triệt để những vấn đề mà Dependabot còn bỏ ngỏ:
- Gom nhóm thông minh (Grouping): Bạn có thể gộp tất cả cập nhật của ESLint hoặc bộ thư viện React vào duy nhất một PR để tiện review.
- Lập lịch hoạt động (Scheduling): Thay vì bị spam cả tuần, bạn có thể cấu hình bot chỉ tạo PR vào sáng thứ Hai.
- Tự động Merge (Automerge): Với các bản vá lỗi nhỏ (patch/minor) đã vượt qua unit test, bot sẽ tự merge luôn mà không cần bạn can thiệp.
Thực tế cho thấy, với codebase trên 50.000 dòng code, việc cập nhật thủ công là bất khả thi. Nếu không tự động hóa, dự án của bạn sẽ sớm trở thành một “viện bảo tàng” công nghệ cũ kỹ.
Cấu hình file renovate.json chuẩn thực tế
File renovate.json nằm ở thư mục gốc chính là linh hồn của hệ thống. Đây là cấu hình mình thường áp dụng cho các dự án production để cân bằng giữa sự tiện lợi và an toàn:
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended",
":separateMajorReleases",
":combinePatchMinorReleases"
],
"timezone": "Asia/Ho_Chi_Minh",
"schedule": ["before 8am on monday"],
"packageRules": [
{
"matchPackageNames": ["react", "react-dom"],
"groupName": "React ecosystem"
},
{
"matchUpdateTypes": ["minor", "patch"],
"automerge": true
}
]
}
Giải mã các thông số quan trọng:
- extends: Tận dụng các bộ quy tắc chuẩn.
config:recommendedgiúp bạn tránh phải cấu hình thủ công từ đầu. - schedule: Mình để bot chạy trước 8h sáng thứ Hai. Như vậy, đầu tuần đi làm bạn chỉ cần check một lượt các PR đã sẵn sàng.
- packageRules: Nơi bạn tùy biến sâu. Ví dụ trên giúp gom
reactvàreact-domlại để tránh lệch version giữa các package liên quan. - automerge: Tính năng này cực kỳ đáng giá. Nếu CI (GitHub Actions/GitLab CI) báo xanh, bot tự động merge giúp tiết kiệm thời gian đáng kể.
Xử lý các dependency “đặc thù” bằng Regex
Không phải lúc nào version cũng nằm trong các file chuẩn như package.json. Đôi khi bạn lưu version của tool trong Makefile hoặc file text lạ.
Renovate xử lý được hết thông qua regexManagers. Dưới đây là cách mình cập nhật version Node.js được định nghĩa trong Dockerfile qua biến môi trường:
{
"regexManagers": [
{
"fileMatch": ["^Dockerfile$"],
"matchStrings": ["ENV NODE_VERSION=(?<currentValue>.*)\\s"],
"depNameTemplate": "node",
"datasourceTemplate": "node"
}
]
}
Kinh nghiệm thực chiến để không bị “ngợp” PR
Dùng bot rất sướng nhưng nếu không biết kiểm soát, nó sẽ gây nhiễu cho team. Dưới đây là 3 quy tắc vàng mình đúc kết được:
1. Tuyệt đối không Automerge bản Major
Các bản cập nhật Major thường đi kèm breaking changes. Hãy để bot tạo PR, sau đó bạn vào đọc changelog và test kỹ dưới local. Renovate rất tâm lý khi đính kèm sẵn link Release Notes ngay trong mô tả PR để bạn tiện theo dõi.
2. Tận dụng Dependency Dashboard
Renovate tự tạo một Issue gọi là “Dependency Dashboard”. Đây là trung tâm điều khiển giúp bạn xem tổng quan PR nào đang đợi, PR nào lỗi, hoặc yêu cầu bot thử update lại một thư viện vừa fail bằng cách tick vào checkbox.
3. Gom nhóm Dev Dependencies để giảm nhiễu
Dự án thường có rất nhiều dev dependencies như lint, prettier hay test runners. Bạn sẽ không muốn nhận 5-10 thông báo chỉ để nâng cấp eslint-plugin. Hãy gom chúng thành một nhóm duy nhất:
{
"packageRules": [
{
"matchDepTypes": ["devDependencies"],
"groupName": "All dev dependencies",
"automerge": true
}
]
}
Lời kết
Quản lý dependency cũng giống như dọn dẹp nhà cửa. Làm mỗi ngày một ít thì rất nhẹ nhàng, nhưng để dồn lại một năm mới làm thì chắc chắn là thảm họa.
Tại các team mình từng làm, sau khi áp dụng Renovate, thời gian bảo trì thư viện giảm từ 4 tiếng mỗi tuần xuống còn chưa đầy 15 phút. Quan trọng nhất, các lỗ hổng bảo mật (CVE) được vá gần như ngay lập tức. Hãy thử setup ngay hôm nay để bảo vệ dự án của bạn!

