设置GITHUB

在项目页的Settings -> Webhooks中设置

  • Raload URL 填写每次调用的钩子地址;

  • Secret 设置一个密码,后面会用到。

服务器webhook文件

  • $secret = "" 这里填入你在github上设置的秘钥
  • $path = "" 这里填你在服务器的项目根目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// 填写你在github设置页面中设置的密钥(Keep it the same with the 'Secret' field on your Webhooks / Manage webhook page of your respostory)
$secret = "";
// 项目根目录, 如: "/var/www/xxxbbs"
$path = "";
// Headers deliveried from GitHub
$signature = $_SERVER['HTTP_X_HUB_SIGNATURE'];
if ($signature) {
$hash = "sha1=" . hash_hmac('sha1', $HTTP_RAW_POST_DATA, $secret);
if (strcmp($signature, $hash) == 0) {
echo shell_exec("cd {$path} && /usr/bin/git reset --hard origin/master && /usr/bin/git clean -f && /usr/bin/git pull 2>&1");
exit();
}
}
http_response_code(404);

更新命令说明

1
shell_exec("cd {$path} && /usr/bin/git reset --hard origin/master && /usr/bin/git clean -f && /usr/bin/git pull 2>&1");
  • /usr/bin/git reset --hard origin/master 强制恢复版本到前一个稳定版

  • /usr/bin/git clean -f 清理提交的更改

  • /usr/bin/git pull 2>&1 拉取最新的版本到本地

这里需要注意是,如果webhook网站处于同目录,用上面的命令webhook文件将被清理。
所以请根据实际应用场景部署。

PlanB shell更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
WEB_PATH='/var/www/webbbs'
WEB_USER='nginx'
WEB_USERGROUP='nginx'
echo "Start deployment"
cd $WEB_PATH
echo "pulling source code..."
git reset --hard origin/master
git clean -f
git pull
git checkout master
echo "changing permissions..."
chown -R $WEB_USER:$WEB_USERGROUP $WEB_PATH
echo "Finished."