使用码云git的webhook实现生产环境代码的自动pull
普通公司小項目,傳統更新線上代碼是每次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.');
}
// 如果啟用驗證,并且驗證買QQ平臺失敗,返回錯誤
// 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后,線上就自動更新了~~
總結
以上是生活随笔為你收集整理的使用码云git的webhook实现生产环境代码的自动pull的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初烧盲狙一条铁三角e40
- 下一篇: VirtualBox压缩vmdk、vag