<acronym id="klsvp"></acronym>

<object id="klsvp"><strong id="klsvp"><small id="klsvp"></small></strong></object>
  • <p id="klsvp"><del id="klsvp"><small id="klsvp"></small></del></p>
    <big id="klsvp"><ruby id="klsvp"></ruby></big>
    <acronym id="klsvp"></acronym>
      1. 當前位置: 博客首頁 >> 分享經驗 >> 閱讀正文

        使用碼云git的webhook實現生產環境代碼的自動pull

        作者: 鄭曉 分類: 分享經驗 發布于: 2018-05-31 23:53 瀏覽:144,119 評論(10)


        普通公司小項目,傳統更新線上代碼是每次ftp/sftp上傳,或提交到svn/git后再ssh到線上環境中去手動拉取代碼,十分麻煩,雖然用上了版本控制,逼格還是不夠高??!
        現在的線上倉庫都支持hook技術,可以很方便的實現代碼的自動化管理。比如我現在使用gitee.com倉庫的webhook功能,監聽master分支有push動作時,可以自動通過設置的hook通知生產環境中的腳本執行git pull拉取代碼,自動更新,非常方便。

        1. 設置并使用公鑰實現免密碼
        目標環境中使用

        ssh-keygen -t rsa -C "xxxxx@zh30.com"
        #cat ~/.ssh/id_rsa.pub 查看公鑰信息

        一路回車生成公鑰,在碼云項目管理-部署公鑰管理中,提交這個公鑰串。
        修改項目.git/config文件的url為如下格式

        [remote "origin"]
        url = git@gitee.com:xxxxx/xxx.git

        git pull 測試

        2. 根目錄或其它位置放一個php文作用webhook的通知接口,內容如下:

        // 本地倉庫路徑 項目目錄
        $local = '/home/wwwroot/your_project';

        // 密碼 gitee項目管理webhook中設置
        $password = '654321';

        //如果請求體內容為空,返回錯誤
        $payload = file_get_contents('php://input');
        if (!$payload) {
        header('HTTP/1.1 400 Bad Request');
        die('HTTP HEADER or POST is missing.');
        }

        // 如果啟用驗證,并且驗證失敗,返回錯誤
        // gitee默認返回json,解析json后驗證密碼
        $data = json_decode($payload, true);
        if(empty($data) || $data['password'] != $password) {
        header('HTTP/1.1 403 Permission Denied');
        die('Permission denied.');
        }

        // 如果倉庫目錄不存在,返回錯誤
        if (!is_dir($local)) {
        header('HTTP/1.1 500 Internal Server Error');
        die('Local directory is missing')}

        //輸出執行結果 包括錯誤信息,在gitee webhook中可以查看和測試
        echo shell_exec("cd {$local} && git pull 2>&1");
        die("done " . date('Y-m-d H:i:s', time()));

        3. 碼云項目管理中,webhooks管理,添加,配置這個php的地址和對應的明文密碼。保存測試,頁面下方會顯示最后一次的腳本執行信息。

        4. 執行出錯的話,很多時候是權限問題。php腳本一般是由www或www-data等帳戶權限來執行,所以整個項目目錄對此帳戶要有權限讀寫,比如全局chown -R www:www .。
        可能需要把/root/.ssh和/root/.gitconfig 拷貝到/home/www中。

        真的非常好用,現在就不需要再登錄到ssh上手動git pull更新了,本地開發完測試完成后,直接push到git后,線上就自動更新了~~

        參考文章:使用webhooks自動部署Github、GitLab、Gitee代碼

        ? ? ? ?

        本文采用知識共享署名-非商業性使用 3.0 中國大陸許可協議進行許可,轉載時請注明出處及相應鏈接。

        本文永久鏈接: http://www.twogeaux.com/webhook-git-pull.html

        使用碼云git的webhook實現生產環境代碼的自動pull:目前有10 條留言

        用戶評論頭像 123發表于 2020年12月03日 17:13[回復]

        有沒有pull時出現過js或css文件句柄被nginx占用導致pull失敗的情況

        用戶評論頭像 跪求大佬發表于 2020年03月26日 17:11[回復]

        求大佬具體一點的實現服務器自動pull的教程

          用戶評論頭像 鄭曉發表于 2020年03月26日 17:18[回復]

          這就是教程了啊, 你覺得哪里不明白,我改改

            用戶評論頭像 跪求大佬發表于 2020年03月26日 17:24[回復]

            我是小白,看起來就很懵逼的這種

              用戶評論頭像 123發表于 2020年04月12日 10:51[回復]

              試一試樓中樓

              用戶評論頭像 123發表于 2020年04月12日 10:52[回復]

              試一試樓中樓2

        用戶評論頭像 ljx發表于 2018年08月27日 17:31[回復]

        老哥, 你這個文本編輯器(博文內容)不怎么好看, 不打算換一個么

          用戶評論頭像 鄭曉發表于 2018年08月28日 11:36[回復]

          麻煩,不想弄。

            用戶評論頭像 哈哈發表于 2018年09月19日 13:23[回復]

            我看還好,哈哈~

        用戶評論頭像 小橙子發表于 2018年06月07日 01:11[回復]

        對我這個小白來說有點干

        發表評論

        change vcode

        欧美一级特黄啪啪片免费_欧美大黑bbb_欧美va天堂在线影院_一级欧美黑人大战白妞
        <acronym id="klsvp"></acronym>

        <object id="klsvp"><strong id="klsvp"><small id="klsvp"></small></strong></object>
      2. <p id="klsvp"><del id="klsvp"><small id="klsvp"></small></del></p>
        <big id="klsvp"><ruby id="klsvp"></ruby></big>
        <acronym id="klsvp"></acronym>