服務器環(huán)境
*PHP 5.4
*Nginx 1.8.0
*GIT version 2.9.4(#git --version)
一、添加 Web Hooks
我的碼云 -> 點擊相應項目A -> 管理-> WebHooks 設置 -> 添加;具體填寫內(nèi)容如下圖所示

WebHooks 設置
二、準備PHP腳本(必須保證瀏覽器可訪問)
不多說,直接帖碼。修改好自定義選項,上傳服務器后到gitee后臺點擊測試驗證是否通過。
<?php
/**
* 自動更新鉤子
* 修改驗證碼及項目路徑即可使用,
* 修改項如下:
* 1、您的自定義密碼
* 2、/home/wwwroot/app您的項目A路徑
* [沖浪蝸牛](http://www.itdecent.cn/u/4913fc14f7fb)
**/
// 接收碼云POST過來的信息
$json = $GLOBALS['HTTP_RAW_POST_DATA'];
$data = json_decode($json, true);
// 打開網(wǎng)站目錄下的hooks.log文件 需要在服務器上創(chuàng)建 并給寫權限
$fs = fopen('./../../logs/webhooks_pull.log', 'a');
fwrite($fs, '================ Update Start ===============' . PHP_EOL . PHP_EOL);
// 自定義密碼 用于驗證 與碼云后臺設置保持一致
$access_token = '您的自定義密碼';
$client_token = $data['password'];
// 請求ip
$client_ip = $_SERVER['REMOTE_ADDR'];
// 把請求的IP和時間寫進log
fwrite($fs, 'Request on [' . date("Y-m-d H:i:s") . '] from [' . $client_ip . ']' . PHP_EOL);
// 驗證token 有錯就寫進日志并退出
if ($client_token !== $access_token) {
echo "error 403";
fwrite($fs, "Invalid token [{$client_token}]" . PHP_EOL);
$fs and fclose($fs);
exit(0);
}
// 如果有需要 可以打開下面,把傳送過來的信息寫進log 可用于調(diào)試,測試成功后注釋即可
// fwrite($fs, 'Data: ' . print_r($data, true) . PHP_EOL);
// 執(zhí)行shell命令并把返回信息寫進日志
exec('cd /home/wwwroot/app; git pull 2<&1; chown -R www:www /home/wwwroot/app/*;', $output);
fwrite($fs, 'Info:' . print_r($output, true) . PHP_EOL);
fwrite($fs, PHP_EOL . '================ Update End ===============' . PHP_EOL . PHP_EOL);
$fs and fclose($fs);
// 調(diào)試時打開
// echo json_encode($output);
三、服務器的設置 (重要)
如果沒有給777權限,pull時會報各種權限錯誤(除非你對用戶及用戶組權限設置的很到位并可以解決站點www用戶組權限的沖突),當然也可以將項目A中的.git目錄權限都設置為777,如下命令是我當前使用的具體操作。
// 為了相對安全,我這里針對需要777權限的目錄進行設置
cd 項目A/.git
# cd .git
chmod -R 777 FETCH_HEAD
chmod -R 777 ./objects
chmod -R 777 ./refs
chmod -R 777 ./logs
注意: 是.git目錄
因為PHP腳本涉及到shell命令執(zhí)行所有需要php開啟exec命令權限
php.ini:

開啟exec權限,刪除紅框中的內(nèi)容保存后重啟php服務即可
四、可以認真寫代碼了
執(zhí)行push的會觸發(fā)WebHooks,同時推送消息給項目A中WebHooks 設置的請求地址,最后完成服務器的git pull。
git status
# git pull
git push
如果還沒有本地初始化項目,可以根據(jù) 碼云gitee本地初始化項目基本設置 這篇進行操作。
至此完成碼云gitee自動部署。
如在操作過程中遇到問題,歡迎留言。