當(dāng)前位置:博客首頁>>分享經(jīng)驗(yàn) >> 閱讀正文

使用碼云git的webhook實(shí)現(xiàn)生產(chǎn)環(huán)境代碼的自動(dòng)pull

作者: 鄭曉 分類: 分享經(jīng)驗(yàn) 發(fā)布于: 2018-05-31 23:53 瀏覽:143,400 評(píng)論(10)


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

1. 設(shè)置并使用公鑰實(shí)現(xiàn)免密碼
目標(biāo)環(huán)境中使用

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

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

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

git pull 測(cè)試

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

// 本地倉庫路徑 項(xiàng)目目錄
$local = '/home/wwwroot/your_project';

// 密碼 gitee項(xiàng)目管理webhook中設(shè)置
$password = '654321';

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

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

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

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

3. 碼云項(xiàng)目管理中,webhooks管理,添加,配置這個(gè)php的地址和對(duì)應(yīng)的明文密碼。保存測(cè)試,頁面下方會(huì)顯示最后一次的腳本執(zhí)行信息。

4. 執(zhí)行出錯(cuò)的話,很多時(shí)候是權(quán)限問題。php腳本一般是由www或www-data等帳戶權(quán)限來執(zhí)行,所以整個(gè)項(xiàng)目目錄對(duì)此帳戶要有權(quán)限讀寫,比如全局chown -R www:www .。
可能需要把/root/.ssh和/root/.gitconfig 拷貝到/home/www中。

真的非常好用,現(xiàn)在就不需要再登錄到ssh上手動(dòng)git pull更新了,本地開發(fā)完測(cè)試完成后,直接push到git后,線上就自動(dòng)更新了~~

參考文章:使用webhooks自動(dòng)部署Github、GitLab、Gitee代碼

? ? ? ?

本文采用知識(shí)共享署名-非商業(yè)性使用 3.0 中國(guó)大陸許可協(xié)議進(jìn)行許可,轉(zhuǎn)載時(shí)請(qǐng)注明出處及相應(yīng)鏈接。

本文永久鏈接: http://www.yjfs.org.cn/webhook-git-pull.html

使用碼云git的webhook實(shí)現(xiàn)生產(chǎn)環(huán)境代碼的自動(dòng)pull:目前有10 條留言

用戶評(píng)論頭像 123發(fā)表于 2020年12月03日 17:13[回復(fù)]

有沒有pull時(shí)出現(xiàn)過js或css文件句柄被nginx占用導(dǎo)致pull失敗的情況

用戶評(píng)論頭像 跪求大佬發(fā)表于 2020年03月26日 17:11[回復(fù)]

求大佬具體一點(diǎn)的實(shí)現(xiàn)服務(wù)器自動(dòng)pull的教程

    用戶評(píng)論頭像 鄭曉發(fā)表于 2020年03月26日 17:18[回復(fù)]

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

      用戶評(píng)論頭像 跪求大佬發(fā)表于 2020年03月26日 17:24[回復(fù)]

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

        用戶評(píng)論頭像 123發(fā)表于 2020年04月12日 10:51[回復(fù)]

        試一試樓中樓

        用戶評(píng)論頭像 123發(fā)表于 2020年04月12日 10:52[回復(fù)]

        試一試樓中樓2

用戶評(píng)論頭像 ljx發(fā)表于 2018年08月27日 17:31[回復(fù)]

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

    用戶評(píng)論頭像 鄭曉發(fā)表于 2018年08月28日 11:36[回復(fù)]

    麻煩,不想弄。

      用戶評(píng)論頭像 哈哈發(fā)表于 2018年09月19日 13:23[回復(fù)]

      我看還好,哈哈~

用戶評(píng)論頭像 小橙子發(fā)表于 2018年06月07日 01:11[回復(fù)]

對(duì)我這個(gè)小白來說有點(diǎn)干

發(fā)表評(píng)論

change vcode