前话: 一般情况,自己在本地开发,代码改动后要push放到线上去看效果,但是我们还要到线上环境手动拉取代码库 git pull 下来, 一来一回太麻烦了。

   现在用webhook就可以实现本地开发,push代码到GitHub上面时,线上自动同步更新的代码,省事多了。

1、首先在GitHub或者码云这些代码托管库上面添加好自己的项目;

2、把本地写好的两个文件上传到代码库, sync.php 和 sync.sh ; (其实就是本地push后自动请求sync.php,   里面执行 sync.sh, 最终就是执行 git pull 的命令)

  sync.php:

<?php
  echo '进来了...';   exec('sh sync.sh'); ?>

sync.sh: (我用的是默认的master分支,其它分支可自己定)

#!/bin/bash
/usr/bin/git pull origin master

3、 vim /usr/local/php/etc/php.ini   # 找到 disable 删除 exec(用 linux命令 /disable, 然后 按n 往下找),因为这个函数默认被禁用了

vim /etc/passwd                     # 将 www 的 /sbin/nologin 改为 /bin/bash , www设置为登录

4、因为,我们的PHP执行其实是使用的www用户。默认都是www用户,PHP中执行git也是使用www用户。

   所以,在线上环境首先要 切换到 www 用户(命令:su  www);

5、设置公钥, 命令: ssh-keygen -t rsa -b 4096 -C "your_email@example.com", 这里填写自己的邮箱账号,弹出:Enter file ... key (/home/www/.ssh/id_rsa):, 然后一直 Enter 就好,结束后会在 /home/www/.ssh 这个目录下面生成一个公钥文件 id_rsa.pub,打开复制内容到GitHub代码库,添加后公钥管理那里。

6、在 /home/wwwroot/目录下面克隆出自己的项目,git clone git@XXX/test.git;

  如果执行报错这种:

  The authenticity of host 'gitee.com (120.55.226.24)' can't be established.
  ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
  ECDSA key fingerprint is MD5:27:e5:d3:f7:2a:9e:eb:6c:93:cd:1f:c1:47:a3:54:b1.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added 'gitee.com,120.55.226.24' (ECDSA) to the list of known hosts.

再执行一次克隆就好 git clone git@XXX/test.git;

7、给线上的 sync.php  和 sync.sh 加执行权限 ; chmod +x sync.php  ;  chmod +x sync.sh

8、上面第4点说到了执行的是www用户,要让www用户免密码执行git命令才可以;

通过 vim  /etc/sudoers  进去修改, 加入

www     ALL=NOPASSWD:/usr/bin/git

9、最后一步, 在你的项目里添加webhook地址, http:XXX.com/sync.php 这种可以访问的, 就是访问sync.php 这个文件,让它去代码库自动拉取代码。

这样就可以在本地开发, push上去后,线上代码自动同步了。

另外,也可以添加钉钉机器人来推送通知;

最新文章

  1. android中的回调简单认识
  2. struts2拦截器
  3. 跟着鸟哥学Linux系列笔记3-第11章BASH学习
  4. 关于CDH中开发Spark
  5. solr与.net系列课程(二)solr的配置文件及其含义
  6. VS2010运行正常的控制台程序在VS2015中出现乱码的解决方法
  7. CSS减肥的工具–Firefox插件 CSS Usage
  8. HTTP协议 HttpWebRequest和 Socket的一点总结
  9. [POI2007]洪水pow 并查集
  10. Libgdx1.5.3发布
  11. PYQT5登录界面跳转主界面方法
  12. centos7防火墙导致不能访问的
  13. 292. Nim Game(easy)
  14. 使用gulp构建一个项目
  15. ionic3使用cnpm可能会出现的问题
  16. git的安装以及生成ssh key
  17. InnoDB存储引擎介绍-(4)Checkpoint机制二
  18. input标签(文本域和文件域)
  19. 第十一章&#160;串 (a)ADT
  20. iOS分辨率的那些事儿(转)

热门文章

  1. 【简洁易懂】CF372C Watching Fireworks is Fun dp + 单调队列优化 dp优化 ACM codeforces
  2. 低版本IE兼容 H5+CSS3 方案
  3. Tomcat源码分析 (五)----- Tomcat 类加载器
  4. if else 深度优化
  5. Vector使用方法简单整理
  6. 《统计学习方法》极简笔记P2:感知机数学推导
  7. Kubernetes容器云平台建设实践
  8. Docker系列之.NET Core入门(三)
  9. Go-项目结构和代码组织
  10. python 编码报错问题 &#39;ascii&#39; codec can&#39;t encode characters 解决方法