次寫完代碼, 打開FileZilla, 把寫好的文件上傳到vps上, 長此以往以爲膩煩, 尋思有沒有更geek的方法, 便有此文.
WebHook是跟隨着Git而興起的技術, 當你push到服務器的時候, 服務器會發送一個特殊的請求到你指定的url上, 而咱們可使用腳本語言來獲取這個請求而且在vps端執行git pull來達到自動部署的目的, 老規矩先貼代碼:php
<?php /** * Simple Git WebHook SDK * * @coding.net * 2016/05/09 * Author: hldh214 <hldh214@gmail.com> */ // 配置項 start $git_dir = '/var/www/.git'; $work_tree = '/var/www'; // 配置項 end // 獲取原始請求 $hook_log = file_get_contents('php://input'); // 使用MySQL記錄log $fh = mysqli_connect('localhost', 'root', 'root', 'git'); // 判斷是否爲WebHook請求 if (!empty($hook_log)) { // 是WebHook請求, 並decode數據 $json = json_decode($hook_log, true); if (array_key_exists('ref', $json)) { // 檢測到ref鍵, 執行pull $cmd = "/usr/bin/sudo git --git-dir=$git_dir --work-tree=$work_tree pull 2>&1"; $sh_log = shell_exec($cmd); $sql = "INSERT INTO `webhook_log` (`hook_log`, `sh_log`, `date`) VALUES ('" . $hook_log . "', '" . $sh_log . "', CURRENT_DATE());"; // 記錄執行log $result = mysqli_query($fh, $sql); } else { // 未檢測到ref鍵, 爲測試請求 $sh_log = 'testing'; $sql = "INSERT INTO `webhook_log` (`hook_log`, `sh_log`, `date`) VALUES ('" . $hook_log . "', '" . $sh_log . "', CURRENT_DATE());"; $result = mysqli_query($fh, $sql); } } else { // 正常訪問 echo '<h1>normal view~</h1>';
把這段代碼用FileZilla上傳到vps上(最後一次使用FileZilla了<3), 把指向這個PHP文件的url填寫到WebHook頁面的deploy_url裏面, 而且點擊測試, 以後回到vps上查看MySQL是否已經有log, 再在開發機試試commit&push, 你會發現, 代碼已經悄然部署到vps上了.mysql