首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

使用 PHP 腳本自動部署 Git 代碼:WebHook 實戰與權限配置詳解

     編輯:PHP 相關知識

使用 PHP 腳本自動部署 Git 代碼:WebHook 實戰與權限配置詳解

利用 Coding/GitHub/BitBucket 的 WebHook,推送代碼後自動觸發 PHP 腳本執行 git pull 更新線上項目。核心難點在於 Linux 權限與 SSH 金鑰配置。

基礎 PHP 接收腳本

<?php
define('PRIVATE_KEY', 'XXXXXXXXXXXXXXXXxxx');
if ($_SERVER['REQUEST_METHOD'] === 'POST' && $_REQUEST['thing'] === PRIVATE_KEY) {
    echo shell_exec("/full/path/to/bin/git pull 2>&1");
}
?>

關鍵坑點與解決

1. git 二進制路徑

Apache 用戶 www 的 PATH 不含 git。用 which git 獲取完整路徑(如 /usr/bin/git),腳本中使用絕對路徑。並加 2>&1 將 STDERR 導向 STDOUT 捕獲錯誤信息。

2. 倉庫目錄權限

chown -R ssh_user:www repository/
chmod -R g+s repository/  # 設置 SGID,新文件繼承組所有權

3. Host key verification failed

以 Apache 用戶執行一次 git pull 將遠程主機加入 known_hosts:

sudo -u www git pull

4. SSH 金鑰配置

為 Apache 用戶生成專用金鑰:

sudo -u www ssh-keygen -t rsa

將生成的公鑰添加到 Git 平台的 Deploy Keys(僅讀權限)。避免使用 GIT_SSH 環境變數指定金鑰,權限控制極其繁瑣。

完整流程圖解

推送 → WebHook POST → PHP 驗證 Token → shell_exec(git pull) → 權限正確 → 代碼更新成功。

參考資源

原文:Git Pull from a PHP Script - Not So Simple

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved