github hooks鉤子的搭建(代碼同步功能,webhooks)

鉤子是什么阳啥,就是將本地代碼推送至github后自動將代碼同步至服務器桌粉。

搭建步驟

  • 在服務器查找運行php的用戶哨颂,為他生成deploy-key车柠,保存在github上
  • 在服務器拉取項目倉庫
  • 在服務器項目根目錄下建立代碼同步的deploy.php
  • github上設置倉庫的webhooks
  • 本地拉取倉庫提交代碼測試

1.設置deploy-key

查找php是什么用戶運行的

ps aux | grep php

我的顯示是www用戶 但是查看所有用戶

cat  /etc/passwd | grep www

查找出來是www-data
查找用戶組

cat /etc/group | grep www

查找出來也是www-data
所以我判定我的php執(zhí)行用戶是www-data 屬于www-data用戶組

配置服務器git:

git config --global user.name "name"
git config --global user.email "email" 

執(zhí)行命令

sudo -Hu www-data ssh-keygen -t rsa

生成www-data用戶的deploy-key(為什么要給www-data用戶生成key瓷患,因為在本地提交代碼時骡尽,github會請求服務器的php文件從而同步服務器代碼)

這時候報錯

報錯.png

報錯原因是無法在目錄下創(chuàng)建目錄以及找不到目錄
原來www目錄屬于root用戶組 權限是rwxr-xr-x


image.png

我們需要進入www目錄創(chuàng)建.ssh目錄后更改目錄用戶權限

chown -R  www-data:www-data ./.ssh/

這時候再次執(zhí)行命令 sudo -Hu www-data ssh-keygen -t rsa 擅编,生成deploy-key攀细。將生成的id_rsa.pub文件內容,添加到項目中的 deploy keys中。

打開github上的項目倉庫辨图,給項目添加deploy-key

image.png

2. 在服務器上拉取自己的倉庫(使用ssh方式)

3.建立代碼同步的deploy.php

在倉庫根目錄下建立deploy.php文件

<?php

@file_put_contents('./req.log',json_encode($_POST).PHP_EOL, FILE_APPEND|LOCK_EX);

class Deployment {
 
    public $serect = 'zjh19971010.'; //自定義的webhooks中配置的密鑰
 
    public function deploy()
    {
        $requestBody = file_get_contents('php://input'); //每次推送的時候班套,會接收到post過來的數(shù)據。
        $payload = json_decode($requestBody, true);    //將數(shù)據轉成數(shù)組故河,方便取值吱韭。
        if(empty($payload)){
            //寫日志
            $this->write_log('send fail from github is empty');exit;
        }else{
            //獲取github推送代碼時經過哈希加密密鑰的值
            $signature = $_SERVER['HTTP_X_HUB_SIGNATURE'];
        }
        
        if (strlen($signature) > 8 && $this->isFromGithub($requestBody,$signature)) {
            //驗證密鑰是否正確,如果正確執(zhí)行命令鱼的。
            $res = shell_exec("cd /var/www/html/ball_mation/ball_mation/ &&                         
git pull 2>&1"); // 項目目錄
            $res_log = "\n -------------------------".PHP_EOL;
            $res_log .= '['.$payload['commits'][0]['author']['name'] . ']' . '向[' . $payload['repository']['name'] . ']項目的' . $payload['ref'] . '分支'.$_SERVER['X-GitHub-Event'].'了代碼理盆。commit信息是:'.$payload['commits']['message'].'。詳細信息如下:' . PHP_EOL;
            $res_log .= $res.PHP_EOL;
            http_response_code(200);
            $this->write_log($res_log);
        }else{
            $this->write_log('git 提交失敶战住猿规!');
            abort(403);
        }
    }
    
    public function isFromGithub($payload,$signature)
    {
        //$hash是github的密鑰。然后與本地的密鑰做對比宙橱。
        list($algo, $hash) = explode("=", $signature, 2); 
        return $hash === hash_hmac($algo, $payload, $this->serect);
    }
 
    public function write_log($data)
    {
        // 此處加載日志類姨俩,用來記錄git push信息,可以自行寫师郑。    
        file_put_contents('./push_push.log', $data.PHP_EOL, FILE_APPEND|LOCK_EX);
    }
}
 
$deploy = new Deployment();
 
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    //觸發(fā)此代碼的時候环葵,git是以post方式觸發(fā)
    $signature = $deploy->deploy();
}

代碼中的$serectshell_exec()函數(shù)中的項目路徑需要更改為自己的

4.設置倉庫的webhooks

image.png

填寫自己的serect跟deploy.php訪問url即可,傳輸方式選擇json
image.png

5.本地測試
拉取倉庫代碼在本地修改提交后宝冕,檢查服務器代碼是否同步张遭,若同步即為成功

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市地梨,隨后出現(xiàn)的幾起案子菊卷,更是在濱河造成了極大的恐慌,老刑警劉巖宝剖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件洁闰,死亡現(xiàn)場離奇詭異,居然都是意外死亡万细,警方通過查閱死者的電腦和手機渴庆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雅镊,“玉大人襟雷,你說我怎么就攤上這事∪逝耄” “怎么了耸弄?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長卓缰。 經常有香客問我计呈,道長砰诵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任捌显,我火速辦了婚禮茁彭,結果婚禮上,老公的妹妹穿的比我還像新娘扶歪。我一直安慰自己理肺,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布善镰。 她就那樣靜靜地躺著妹萨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪炫欺。 梳的紋絲不亂的頭發(fā)上乎完,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音品洛,去河邊找鬼树姨。 笑死,一個胖子當著我的面吹牛桥状,可吹牛的內容都是我干的娃弓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼岛宦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了耍缴?” 一聲冷哼從身側響起砾肺,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎防嗡,沒想到半個月后变汪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蚁趁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年裙盾,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片他嫡。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡番官,死狀恐怖,靈堂內的尸體忽然破棺而出钢属,到底是詐尸還是另有隱情徘熔,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布淆党,位于F島的核電站酷师,受9級特大地震影響讶凉,放射性物質發(fā)生泄漏。R本人自食惡果不足惜山孔,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一懂讯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧台颠,春花似錦褐望、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至酪呻,卻和暖如春减宣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背玩荠。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工漆腌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阶冈。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓闷尿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親女坑。 傳聞我的和親對象是個殘疾皇子填具,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348