我們的項(xiàng)目一般都會(huì)托管在類似 Github 和 Coding 之類的平臺(tái)上,當(dāng)項(xiàng)目部署在服務(wù)器上之后,如果發(fā)現(xiàn)需要更改一處地方,需要在本地更改之后提交到 Github,然后再登錄服務(wù)器拉取 Github 上的代碼,可以說操作非常麻煩了,我們可以使用 Github 上的 Webhooks 實(shí)現(xiàn)本地提交之后服務(wù)器上自動(dòng)更新。
服務(wù)器中的操作:
1.生成公鑰。公鑰有兩個(gè):Git 用戶公鑰和項(xiàng)目部署公鑰,之前部署項(xiàng)目時(shí)候直接在服務(wù)器上使用 git clone 來克隆 Github 上的代碼,所以用戶公鑰已經(jīng)配置過了,很簡(jiǎn)單這里就不贅述了。
部署公鑰: sudo -Hu Ubuntu ssh-keygen -t rsa 請(qǐng)選擇 “no passphrase”,一直回車下去
2.準(zhǔn)備鉤子文件(假設(shè)項(xiàng)目的目錄為 project_dir):
創(chuàng)建目錄:mkdir /home/ubuntu/project_dir/public/hook 注意:這里多了一層 public,因?yàn)槲业捻?xiàng)目是一個(gè) Laravel 項(xiàng)目,入口文件在 public 下的 index.php
修改目錄權(quán)限: chown -R ubuntu:ubuntu /home/ubuntu/project_dir/public/hook
寫入鉤子文件: sudo -Hu ubuntu touch /home/ubuntu/project_dir/public/index.php
文件內(nèi)容:
<?php
error_reporting(1);
$target = ‘/home/ubuntu/project_dir’; // 生產(chǎn)環(huán)境web目錄
$token = ‘您在coding填寫的hook令牌’;
// $json = json_decode(file_get_contents(‘php://input’), true); 如果是application/json格式
$json = $_POST[‘payload’]; // 如果是application/x-www-form-urlencoded
if (empty($json[‘token’]) || $json[‘token’] !== $token) { exit(‘error request’); }$cmd = “sudo -Hu ubuntu cd $target && git pull”; shell_exec($cmd);
3.修改 git 配置
sudo -Hu ubuntu git config –global credential.helper store # 永久保存
sudo -Hu ubuntu git config –global user.name “hiwynn”
sudo -Hu ubuntu git config –global user.email “email@email.com” # 郵箱請(qǐng)與conding上一致
Github 上的操作:
1.添加部署公鑰:
復(fù)制 /home/ubuntu/webhook.pub (生成的時(shí)候我起的名字叫webhook)的內(nèi)容到 Github 中的 項(xiàng)目 > Settings > Deplow keys > Add deploy key 中
2.添加 Webhooks:
項(xiàng)目 > Settings > Webhooks > Add webhook
3.如果成功的話這里是個(gè)綠色的對(duì)號(hào),不成功的話是個(gè)紅色的嘆號(hào)。如果不成功的話檢查一下各項(xiàng)配置,更改之后點(diǎn)擊 Redeliver 重新發(fā)送試試。