Cấu hình WebHook tự động cập nhật mã nguồn trên Gitee

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

Thẻ: Gitee Webhook git php Bash

Đăng vào ngày 16 tháng 6 lúc 19:23