Tổng đài tư vấn: 033 688 8648
Hotline: 039 511 6390
Có 2 cách để làm điều này với NodeJS
Bạn có thể sử dụng setInterval
hoặc một thư viện như node-schedule
để kiểm tra repository theo thời gian định kỳ.
const simpleGit = require('simple-git');
const path = require('path');
const repoPath = path.resolve(__dirname, 'your-clone-folder'); // Đường dẫn đến thư mục đã clone repo
const repoURL = 'https://github.com/username/repository-name.git'; // URL repo
const git = simpleGit(repoPath);
async function updateRepo() {
try {
console.log('Kiểm tra cập nhật...');
await git.fetch(); // Tải thông tin cập nhật từ remote
const status = await git.status();
if (status.behind > 0) {
console.log('Có thay đổi mới. Đang pull về...');
await git.pull(); // Kéo code mới về
console.log('Cập nhật thành công!');
} else {
console.log('Không có thay đổi mới.');
}
} catch (error) {
console.error('Lỗi khi kiểm tra/cập nhật repository:', error);
}
}
// Chạy định kỳ mỗi phút (60 giây)
setInterval(updateRepo, 60 * 1000);
Đây là cách tốt nhất để tự động cập nhật code mỗi khi có thay đổi trên repository. Khi có push mới lên GitHub, webhook sẽ gửi thông báo đến server của bạn, và server sẽ kích hoạt việc cập nhật.
Cách làm:
Tạo webhook trên GitHub:
http://your-server-address/webhook
) vào trường Payload URL.application/json
.Viết server Node.js để nhận webhook: Cài đặt express
và body-parser
:
npm install express body-parser simple-git
Mã nguồn Node.js:
const express = require('express');
const bodyParser = require('body-parser');
const simpleGit = require('simple-git');
const path = require('path');
const app = express();
const PORT = 3000;
const repoPath = path.resolve(__dirname, 'your-clone-folder'); // Đường dẫn đến repo
const git = simpleGit(repoPath);
app.use(bodyParser.json());
// Endpoint nhận webhook
app.post('/webhook', async (req, res) => {
console.log('Webhook received:', req.body);
// Kiểm tra nếu có push event
if (req.body.ref === 'refs/heads/main') { // Kiểm tra branch 'main'
try {
console.log('Pulling code...');
await git.pull();
console.log('Cập nhật code thành công!');
} catch (error) {
console.error('Lỗi khi pull code:', error);
}
}
res.status(200).send('Webhook received');
});
app.listen(PORT, () => {
console.log(`Server đang chạy tại http://localhost:${PORT}`);
});
Cách hoạt động:
push
vào branch, webhook sẽ gửi thông báo đến server của bạn, server sẽ xử lý và cập nhật code thông qua git pull
.