设为首页 收藏本站
查看: 863|回复: 0

[经验分享] 利用WebHook实现PHP自动部署Git代码

[复制链接]

尚未签到

发表于 2017-12-30 15:38:22 | 显示全部楼层 |阅读模式
  平时项目代码都托管在Coding,然后每次提交了代码之后都要SSH到服务器上去git pull一次,很是繁琐,在看了OverTrue的《使用PHP脚本远程部署git项目》后就尝试在自己服务器上搞一下自动化部署,下面把部署步骤列出来算是一个分享与备忘。
  首先在Coding上创建一个项目,然后在本地clone一份。
在服务器上(以Nginx环境为例,Apache请看OverTrue的教程)
1. 生成公钥
  公钥有两个:1. git用户公钥,2. 部署公钥:
  git用户公钥
123ssh-keygen -t rsa -C "admin@xsooo.com"# 然后一直回车就行# 生成的文件通常是 /root/.ssh/id_rsa,如果非root用户请查看提示上的路径  部署公钥
  sudo -Hu www ssh-keygen -t rsa # 请选择 “no passphrase”,一直回车下去
2. 准备钩子文件
  创建和修改目录权限:
12mkdir /home/wwwroot/website.com/hookchown -R www:www /home/wwwroot/website.com/hook  写入钩子文件:
1sudo -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('error request'); }  $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);  确保你的hook文件可以访问:http://example.com/hook/index.php,钩子准备完成。
3.修改git配置和保存git用户名密码
123sudo -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一次,以后都可以实现自动部署了:
1sudo -Hu www git clone https://git.coding.net/yourname/yourgit.git /home/wwwroot/website.com/  --depth=1  这个时候应该会要求你输入一次Coding的帐号和密码,因为上面我们设置了永久保存用户名和密码,所以之后再执行git就不会要求输入用户名和密码了。
  **!!注意,这里初始化clone必须要用www用户**
  2.往Coding.net提交一次代码测试:
  在本地clone的仓库执行:
12git commit -am "test hook" --allow-emptygit push  OK,稍过几秒,正常的话你在配置的项目目录里就会有你的项目文件了。
初始化Laravel框架
  1. 下载Composer
  在项目目录下执行:
12sudo -Hu www curl -sS https://getcomposer.org/installer | phpsudo -Hu www php composer.phar install  **!!记得在本地提交的时候在.gitignore中加上composer.phar**
  ======================================================
  以上只是针对我个人服务器环境的一个搭建过程,欢迎大家指正、探讨。
  服务器环境:Linux(CentOS) - AMH - Nginx & MySql
  WWW用户目录:/home/www
  项目目录:/home/wwwroot/Dev/website.com/web/
  Hook目录:/home/wwwroot/Dev/m.website.com/web/hook/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429715-1-1.html 上篇帖子: 基于bootstrap + php +ajax datatable 插件的使用 下篇帖子: PHP连接数据库:封装成类
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表