Cấu hình tự động đồng bộ mã nguồn khi có thay đổi trên Git
Bước 1: Tạo file hook.php trên thư mục gốc của dự án trên server
<?php
// Đọc dữ liệu JSON từ yêu cầu webhook
$webhookData = json_decode(file_get_contents('php://input'), true);
// Kiểm tra xem có thay đổi thực sự không
if (isset($webhookData['ref']) && $webhookData['total_commits_count'] > 0) {
// Ghi log bắt đầu quá trình pull
$logMessage = PHP_EOL . "------------------------- BẮT ĐẦU CẬP NHẬT -------------------------" . PHP_EOL;
// Thực thi lệnh pull từ repository
$pullResult = shell_exec("cd /var/www/project && git pull https://user:password@gitee.com/username/repo.git 2>&1");
// Tạo thông tin log chi tiết
$detailLog = '------------------------------------------------------------' . PHP_EOL;
$detailLog .= 'Người dùng: ' . $webhookData['user_name'] . PHP_EOL;
$detailLog .= 'Thời gian: ' . date('Y-m-d H:i:s') . PHP_EOL;
$detailLog .= 'Dự án: ' . $webhookData['repository']['name'] . PHP_EOL;
$detailLog .= 'Chi nhánh: ' . $webhookData['ref'] . PHP_EOL;
$detailLog .= 'Số commit: ' . $webhookData['total_commits_count'] . PHP_EOL;
$detailLog .= 'Thông điệp: ' . $webhookData['commits']['message'] . PHP_EOL;
$detailLog .= $pullResult . PHP_EOL;
$detailLog .= "------------------------- KẾT THÚC CẬP NHẬT -------------------------" . PHP_EOL;
// Ghi log vào file
file_put_contents("/var/log/webhook/" . date('Y-m-d') . ".log", $detailLog, FILE_APPEND);
}
?>
Bước 2: Cấu hình WebHook trên Gitee
Bước 3: Đảm bảo server đã cài đặt Git và clone dự án về thư mục web
git clone https://gitee.com/username/repo.git
Bước 4: Thiết lập quyền cho thư mục Git
chown -R www-data:www-data /var/www/project
Bước 5: Kiểm tra thủ công quá trình cập nhật
cd /var/www/project && git pull
Bước 6: Xử lý xung đột khi git pull
git stash && git pull
Sử dụng WebHook với宝塔 (BaoTa) Panel
Trong quản lý phần mềm, cài đặt WebHook宝塔 và thêm script sau:
#!/bin/bash
echo ""
# In thời gian hiện tại
current_time=$(date "+%Y-%m-%d %H:%M:%S")
echo "Thời gian: $current_time"
echo "Bắt đầu quá trình cập nhật"
# Đường dẫn dự án
project_path="/data/wwwroot/project_folder/"
# URL repository
repo_url="https://gitee.com/username/repo.git"
echo "Đường dẫn dự án: $project_path"
# Kiểm tra xem thư mục dự án có tồn tại không
if [ -d "$project_path" ]; then
cd $project_path
# Kiểm tra xem có thư mục .git không
if [ ! -d ".git" ]; then
echo "Cloning repository..."
git clone $repo_url temp_repo
mv temp_repo/.git .
rm -rf temp_repo
fi
# Reset và pull mã nguồn mới nhất
git reset --hard origin/master
git pull
# Cập nhật quyền
chown -R www-data:www-data $project_path
echo "Hoàn tất cập nhật"
exit 0
else
echo "Thư mục dự án không tồn tại"
echo "Kết thúc"
exit 1
fi
Lưu ý quan trọng:
- Đảm bảo server có thể truy cập vào repository Git
- Cài đặt các dependency cần thiết
- Kiểm tra quyền truy cập cho user web server
- Theo dõi file log để phát hiện lỗi trong quá trình cập nhật