碼云gitee利用PHP腳本拉取實現(xiàn)自動部署(可用于生產(chǎn)環(huán)境)

服務器環(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自動部署。
如在操作過程中遇到問題,歡迎留言。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 默默的手機APP分享,從美食到旅游,從手賬到便簽,從文化社區(qū)到TED,時間管理,筆記,簡書,喜馬拉雅。個個都酷炫,...
    蒲公英annly閱讀 790評論 0 1
  • 小時候吃得都是紅色的 好看,好酸 等不到它紅的發(fā)紫 只剩一樹桑葉 現(xiàn)在才知到它成熟的模樣 居然相隔幾十年 桑葚熟了...
    洛水秦韻閱讀 567評論 3 18
  • 我終于找到了一塊美玉, 它的名字叫愛情。 我把它捧在手心里, 它是那么干凈,溫潤,晶瑩剔透。 我生怕灰塵玷污了它,...
    森垚閱讀 438評論 0 1
  • 上一章 三十四 白沙左手一招,軍令就要傳下。 他身后突地有人大喊一聲,“且慢!”他不由回頭望去,見卻是駱寒山立馬在...
    德萬托阿閱讀 422評論 0 5

友情鏈接更多精彩內(nèi)容