日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

代码 拉取_Git 利用 Webhooks 实现代码的自动拉取

發(fā)布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代码 拉取_Git 利用 Webhooks 实现代码的自动拉取 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

WebHook 簡介

WebHook 功能是幫助用戶 push 代碼后,自動回調(diào)一個您設(shè)定的 http 地址。 這是一個通用的解決方案,用戶可以自己根據(jù)不同的需求,來編寫自己的腳本程序。

環(huán)境

服務(wù)器:ubuntu
php:7.2.28

本文以拉取碼云(github、Coding等均適用)為例,利用WebHook實現(xiàn)PHP自動部署Git代碼。
因為PHP腳本涉及到shell命令執(zhí)行,所以要刪除php.ini里面的禁用函數(shù):exec、shell_exec等。

由于權(quán)限問題,所以,需要為目錄和文件設(shè)置擁有者、所屬組。

sudo chown -R www:www /www/wwwroot/choudalao

生成公鑰

公鑰分為

  • git用戶公鑰(SSH公鑰),
  • 部署公鑰。
  • SSH公鑰

    // 換成自己的郵箱 ssh-keygen -t rsa -C "1937832819@qq.com"


    查看并復(fù)制

    sudo cat /home/ubuntu/.ssh/id_rsa.pub

    打開碼云,點擊頭像下拉框的設(shè)置。新建一個SSH公鑰。

    如果綁定郵箱,添加成功會受到一條郵件。

    部署公鑰

    // 創(chuàng)建 .ssh目錄 sudo mkdir /home/www/.ssh // 將目錄 .ssh 的擁有者、所屬組修改為 www(如果已經(jīng)是就不用改了) sudo chown -R www:www /home/www/.ssh // 在 /home/www/.ssh 目錄下生成密鑰,郵箱請與碼云上一致 sudo -Hu www ssh-keygen -t rsa -C "1937832819@qq.com"


    成功后,查看并復(fù)制

    // 部署公鑰生成后,執(zhí)行下面的代碼查看公鑰,復(fù)制 sudo cat /home/www/.ssh/id_rsa.pub

    碼云上回到我們的項目目錄,復(fù)制粘貼我們的項目公鑰。

    git 的全局配置

    sudo -Hu www git config --global credential.helper store # 永久保存 sudo -Hu www git config --global user.name "1937832819@qq.com" sudo -Hu www git config --global user.email "1937832819@qq.com" # 郵箱請與碼云上一致

    配置完成之后可以 clone 或 pull 項目來驗證是否配置成功(注意:要切換成www運行用戶來進行操作),若多次操作只需輸入一次用戶名、密碼,即配置成功,若每一次操作都有輸入用戶名密碼,則配置不成功,需要重新檢查配置。

    倉庫配置

    打開碼云的項目,管理,然后對WebHook進行配置,大概如下

    鉤子代碼

    編輯web_hook.php文件

    <?php /*** Description:鉤子* Created by PhpStorm.* User: Vijay <1937832819@qq.com>* Date: 2020/4/29* Time: 22:27*/// 接收碼云POST過來的信息 $json = $GLOBALS['HTTP_RAW_POST_DATA']; $data = json_decode($json, true);// 打開網(wǎng)站目錄下的hooks.log文件 需要在服務(wù)器上創(chuàng)建 并給寫權(quán)限 $fs = fopen('./data/logs/webhooks_pull.log', 'a'); fwrite($fs, '================ Update Start ===============' . PHP_EOL . PHP_EOL); // 自定義密碼 用于驗證 與碼云后臺設(shè)置保持一致 $access_token = 'zkym'; $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); fwrite($fs, 'php belongs to [' . system("whoami") . ']' . 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命令,cd到網(wǎng)站根目錄,執(zhí)行g(shù)it pull進行拉取代碼,并把返回信息寫進日志 exec('cd /www/wwwroot/choudalao; git pull 2<&1; chown -R www:www /www/wwwroot/choudalao/*;', $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);

    調(diào)試

    大部分已經(jīng)完成了,接下來我們來測試一下,

    本地修改并提交

    git commit -am's'

    git push

    查看我們的日志文件

    發(fā)現(xiàn)有一個報錯

    fatal: could not read Username for 'https://gitee.com': No such device or address

    這是因為git config文件中沒有用戶身份信息

    解決方法

    在請求串中加入身份信息即可:
    格式

    @gitee.com/[username]/project.git"">https://[userName]:[password]@gitee.com/[username]/project.git

    cd .git vim config

    本地再次推送,查看日志。

    大功靠成。

    總結(jié)

    以上是生活随笔為你收集整理的代码 拉取_Git 利用 Webhooks 实现代码的自动拉取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。