利用WebHook实现PHP自动部署Git代码
2016-06-06 12:50
896 查看
平时项目代码都托管在Coding,然后每次提交了代码之后都要SSH到服务器上去git pull一次,很是繁琐,在看了OverTrue的《使用PHP脚本远程部署git项目》后就尝试在自己服务器上搞一下自动化部署,下面把部署步骤列出来算是一个分享与备忘。首先在Coding上创建一个项目,然后在本地clone一份。
部署公钥sudo -Hu www ssh-keygen -t rsa # 请选择 “no passphrase”,一直回车下去
写入钩子文件:
确保你的hook文件可以访问:http://example.com/hook/index.php,钩子准备完成。
这个时候应该会要求你输入一次Coding的帐号和密码,因为上面我们设置了永久保存用户名和密码,所以之后再执行git就不会要求输入用户名和密码了。**!!注意,这里初始化clone必须要用www用户**2.往Coding.net提交一次代码测试:在本地clone的仓库执行:
OK,稍过几秒,正常的话你在配置的项目目录里就会有你的项目文件了。
**!!记得在本地提交的时候在.gitignore中加上composer.phar**======================================================以上只是针对我个人服务器环境的一个搭建过程,欢迎大家指正、探讨。服务器环境:
在服务器上(以Nginx环境为例,Apache请看OverTrue的教程)
1. 生成公钥
公钥有两个:1. git用户公钥,2. 部署公钥:git用户公钥123 | ssh-keygen -t rsa -C "admin@xsooo.com"# 然后一直回车就行# 生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径 |
2. 准备钩子文件
创建和修改目录权限:12 | mkdir/home/wwwroot/website.com/hookchown-Rwww:www/home/wwwroot/website.com/hook |
1 | sudo -Hu www touch /home/wwwroot/website.com/hook/index.php |
1234567891011121314151617181920212223242526272829303132 | <?php error_reporting(1); $target='/home/wwwroot/website.com';// 生产环境web目录 $token='您在coding填写的hook令牌';$wwwUser='www';$wwwGroup='www'; $json=json_decode(file_get_contents('php://input'),true); if(empty($json['token'])||$json['token']!==$token){ exit('errorrequest');} $repo=$json['repository']['name']; //$cmds = array(// "cd $target && git pull",// "chown -R {$wwwUser}:{$wwwGroup} $target/",//); //foreach ($cmds as $cmd) {// shell_exec($cmd);//}//感谢@墨迹凡指正,可以直接用www用户拉取代码而不用每次拉取后再修改用户组$cmd="sudo -Hu www cd $target && git pull";shell_exec($cmd); |
3.修改git配置和保存git用户名密码
123 | sudo -Hu www git config --global credential.helper store # 永久保存sudo -Hu www git config --global user.name "Bantes" sudo -Hu www git config --global user.email "admin@xsooo.com" # 邮箱请与conding上一致 |
在Coding网站
1.添加用户公钥
复制/root/.ssh/id_rsa.pub内容到个人设置页的SSH公钥里添加即可(https://coding.net/user/account/setting/keys)
2.添加部署公钥
复制/home/www/.ssh/id_rsa.pub的内容并添加到部署公钥:选择项目 > 设置 > 部署公钥 > 新建 > 粘贴到下面框并确认
3.添加hook
选择项目 > 设置 > WebHook > 新建hook > 粘贴你的hook/index.php所在的网址。比如:http://example.com/hook/index.php, 令牌可选,但是建议写上。稍过几秒刷新页面查看hook状态,显示为绿色勾就OK了。初始化
1.我们需要先在服务器上clone一次,以后都可以实现自动部署了:1 | sudo-Huwwwgitclone https://git.coding.net/yourname/yourgit.git /home/wwwroot/website.com/ --depth=1 |
12 | git commit -am "test hook" --allow-emptygit push |
初始化Laravel框架
1. 下载Composer在项目目录下执行:12 | sudo-Huwwwcurl-sS https://getcomposer.org/installer | phpsudo-Huwwwphpcomposer.pharinstall |
Linux(CentOS) - AMH - Nginx & MySqlWWW用户目录:
/home/www项目目录:
/home/wwwroot/Dev/website.com/web/Hook目录:
/home/wwwroot/Dev/m.website.com/web/hook/侵必删
相关文章推荐
- PHP中的错误处理
- phpnow升级php版本 php-5.2.14-Win32升级至5.3.5
- php学习笔记之封装练习题
- 趣谈PHP 多态
- liunx 下thinkphp伪静态配置 rewrite
- ThinkPHP中简单的CURD操作
- PHP基础-1
- 174 php 延迟绑定 抽象类 self call_user_func_array
- phpexcel的问题
- Mac matplotlib安装
- PHP 爬虫
- output——标签,拖动进度条,显示进度
- PHP session 会话处理函数
- PHP的foreach中无法替换数组的值
- php-fpm 启动、关闭、重启
- PHP 魔术方法之__set__get__unset,__isset,__call
- php-扒数据
- PHP下操作MySql
- 每天laravel-20160822|CookieJar-2
- 每天laravel-20160822|CookieJar-2