Git部署Webhooks 提交代码后Web端自动更新

以前作为一个野路子,写完代码直接FTP丢到服务器去,后来改用Git来管理代码,但是代码提交到Git服务器,总是要另外提交一份到Web服务器,或者连接服务器从Git更新代码,最近有空刚好研究了一下自动部署。
Git支持WebHooks,即本地写完代码后,直接push到git服务器,git服务器发现有代码提交,会自动post通知一个url,通过这个机制,可以让服务器在收到post请求后,自动pull拉取代码。

测试平台

CentOS 7.2
PHP 5.6
Gitee 码云

开始之前

1:以root用户,ssh登录到服务器
2:切换到Web的所有站点目录

cd /home/wwwroot/

3:给web服务的用户目录权限

chown -R www:www example.com/

4:切换到www用户

sudo su -s /bin/bash www

部署Git

www用户部署Git,不多赘述,Git基础

1:创建ssh公钥,并添加到码云的Git平台中

ssh-keygen -t rsa -C "xxxxxx@xxx.com
cat ~/.ssh/id_rsa.pub

2:服务器中初始化git

git init
git remote add origin git@gitee.com:user/www.example.com.git

3:必须先进行一次pull,此时会询问是否信任,输入yes后提交,如果不手动进行一次pull,在webhooks中将无法继续。

WebHooks

1:在码云的Git项目中配置WebHooks

勾选push后,项目收到的所有Push,都会通过Post提交给URL

2:Web服务端的响应代码,Web根目录新建hooks.php,内容为:

<?php
$data	= file_get_contents("php://input");
$data	= json_decode($data,true);

if($data['password'] == '123456'){
	shell_exec("
		cd /home/wwwroot/example.com && 
		git reset --hard HEAD && 
		git clean -f -d && 
		git pull origin master 2>&1
	");
	exit;
}

接下来从客户端提交push试试呢?

注意

1:事先请一定检查是否有shell_exec执行权限,可以在php.ini或phpinfo()中查询
2:通过php来执行shell_exec来pull代码,一定要有足够的权限,即给www用户目录权限等,否则一定失败
3:WindowsServer+IIS的服务器我折腾了好久,没有成功,估计也是权限问题,给目录权限?phpcgi运行用户权限?iis中站点脚本执行权限?搞不太清楚,放弃了。
4:git pull的时候,如果本地代码和Git仓库的有冲突,是会失败的,所以在hook.php的代码中加入了reset和clean,所以如果有直接修改Web目录的代码并未手动push,在下次自动pull的时候,会丢失没有push的代码。

发表评论
评论
大雄回复
2017-09-19 17:50macOSChromeIP:广东
基佬看招!
关关回复
2017-09-20 16:42Windows 10ChromeIP:浙江
又来卖屁股了?
小俊回复
2017-09-19 21:06Windows 10ChromeIP:广东
我记不住git的命令
关关回复
2017-09-20 16:42Windows 10ChromeIP:浙江
常用的不超过10句,记事本里存一下,用时粘贴,多用几次就记住了
SumKing回复
2017-09-19 23:17Windows 7ChromeIP:浙江
静静的看你装比~
Tokin回复
2017-09-20 18:21macOSChromeIP:浙江
小心有屎
大雄回复
2017-09-20 18:22Windows 10ChromeIP:广东
鸡巴一甩,纵横四海。
关关回复
2017-09-20 18:28Windows 10ChromeIP:浙江
3秒软
上海seo回复
2017-09-21 22:05Windows 7ChromeIP:山东
学习啦。。。博主高手
Bary回复
2017-09-23 10:48Windows 7FirefoxIP:山东
你这样会造成服务暂停吧,先 fetch 下来更好些。
Tokin回复
2017-09-25 08:18macOSChromeIP:浙江
哈哈哈,3秒对大雄来说是不是太漫长了点
Flyer回复
2017-10-04 02:22macOSSafariIP:香港
每次都要看一下命令,因为不常用
wang回复
2018-07-25 11:41macOSChromeIP:新加坡
我用的node作为响应服务器,在github上测试是成功的,但是用码云就不行了,地址和secret都是一样的 ,
关关回复
2018-12-27 00:27Windows 10ChromeIP:江苏
肯定是有哪个步骤不对 哈哈
wang回复
2018-07-25 11:41macOSChromeIP:新加坡
我用的node作为响应服务器,在github上测试是成功的,但是用码云就不行了,地址和secret都是一样的 ,
女人赚钱项目回复
2018-11-28 14:14Windows 7ChromeIP:湖南
学习了,谢谢分享
女人赚钱项目回复
2018-11-28 14:14Windows 7ChromeIP:湖南
学习了,谢谢分享
sfwg回复
2020-05-13 18:18Windows 7ChromeIP:广西
京东专用快递网站 快递单号 空包代发www.5adanhao.cn
伏天氏回复
2021-04-30 12:08Windows 10ChromeIP:安徽
学习了,谢谢分享
元尊回复
2021-04-30 12:10Windows 10ChromeIP:安徽
每次都要看一下命令,因为不常用
左道倾天回复
2021-04-30 12:11Windows 10ChromeIP:安徽
你这样会造成服务暂停吧,先 fetch 下来更好些。
仙宫回复
2021-06-06 13:39Windows 10ChromeIP:安徽
每次都要看一下命令,因为不常用
斗罗大陆回复
2021-06-06 13:40Windows 10ChromeIP:安徽
静静的看你装比~
万相之王回复
2021-06-06 13:41Windows 10ChromeIP:安徽
学习啦。。。博主高手
唐家三少回复
2021-06-06 13:42Windows 10ChromeIP:安徽
我记不住git的命令
j5gf回复
2021-11-24 13:16Windows 7ChromeIP:广西
7号礼品网专业小礼品代发网, 空单,ab单,云仓代发http://www.7lp.cn