前话: 一般情况,自己在本地开发,代码改动后要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上去后,线上代码自动同步了。

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

webhook 自动部署代码的更多相关文章

  1. 关于gitlab+jenkins自动部署代码的实现

    本人PHP开发者,项目组大多是PHP,少量java项目. 因公司目前服务器和项目的管理比较混乱,与领导商量后,决定尝试 gitlab+jenkins自动化部署(之前用的svn FTP手动部署代码),解 ...

  2. 在linux服务器上装svn版本管理,自动部署代码到项目

    在linux服务器上装svn版本管理,自动部署代码到项目 http://bbs.aliyun.com/read/9715.html?spm=5176.7114037.1996646101.1.W3zw ...

  3. 在linux服务器上装svn版本管理,自动部署代码到web项目

    在linux服务器上装svn版本管理,自动部署代码到项目 1.安装svn服务器端  yum install subversion   从镜像下载安装svn服务器端 中间会提示是否ok,输入y,确认  ...

  4. jenkins自动部署代码到多台服务器

    下面讲一下如何通过一台jenkins服务器构建后将代码分发到其他的远程服务器,即jenkins自动部署代码到多台服务器. 1.下载 pulish over ssh 插件 2.系统管理 -> 系统 ...

  5. Jenkins 实现前端自动打包,自动部署代码及邮件提醒功能

    在之前的公司,我们前端使用webpack构建项目,项目构建完成后,我们会使用ftp或linux的一些命令工具上传我们的文件到服务器上,这种方式虽然是可以,但是最近面试的时候,人家会问我前端如何部署项目 ...

  6. window、linux系统与linux服务器之间使用svn同步及自动部署代码的方法

    摘要: 在家用PC,在公司用办公电脑对一个项目的代码进行修改时,会遇到代码同步的问题.本文讲解了代码同步及自动部署的解决办法. 实现方法: 1.首先在linux服务器上和linux上安装svn(sud ...

  7. svn钩子(hooks)自动部署代码到web目录

      版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/li956732806/article/details/71158869   web目录:/hoe ...

  8. 宝塔webHook自动同步代码的使用

    #!/bin/bashecho ""#输出当前时间date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"echo " ...

  9. 使用PHP自动部署GIT代码

    最近在使用Coding的代码托管,顺便设置了WebHook自动部署,过程还是挺艰辛的,主要还是没搞懂Linux的权限控制,不过好在弄好了,分享一下获益最深的一篇文章,供大家参考,原文是英文版的,我的英 ...

随机推荐

  1. 使用mybatis实现分页查询示例代码分析

    *******************************************分页查询开始*************************************************** ...

  2. Linux--shell重定向与文件处理命令--02

    一.IO重定向 1.数据输入:键盘---标准输入,但并不是唯一输入方式 ” | passwd –stdin username #同时添加用户和密码 while line;do 循环体...$line ...

  3. 004——Netty之高性能IO(Reactor)

    一.原始方式 方法一: # 使用while循环,不断监听端口是否有新的套接字链接 while(true){ socket = accept(); handle(socket) } # 做法局限:处理效 ...

  4. laya 下以光标为中心缩放对象

    private MouseWheel(e: Laya.Event) { console.log("event"); let currentSp = e.target as Laya ...

  5. React预备知识点

    1.react中的状态提升 react的状态提升就是用户对子组件操作,子组件不改变自己的状态,而是通过自己的props把操作改变的数据传递给父组件,改变父组件的状态,从而改变受父组件控制的所有子组件的 ...

  6. DRF (Django REST framework) 中的路由Routers

    路由Routers 注意是:对于视图集ViewSet!!!我们除了可以自己手动指明请求方式与动作action之间的对应关系外,还可以使用Routers来帮助我们快速实现路由信息. REST frame ...

  7. CSS动效集锦,视觉魔法的碰撞与融合(一)

    前言 在本文中我讲述了7种CSS的动效,它们也许看起来并不惊艳,但是我认为却足够传达本文的理念:编写一些特殊的CSS样式的时候需要不拘于常理,要用特殊的认识角度看待标签和样式属性,从而用「绕个弯」的方 ...

  8. Code signing is required for product type 'Unit Test Bundle' in SDK 'iOS 11.0.1'

    Code signing is required for product type 'Unit Test Bundle' in SDK 'iOS 11.0.1' 进入 projects and lis ...

  9. 简单架构:反射实现抽象工厂+IDAL接口完全独立DAL

    一.普通架构中存在的问题 StudentDB数据库,包含一张StudentInfoTB表,结构如下: s_id int primary key identity(1,1), s_name Nvarch ...

  10. Django之上传图片,分页,三级联动

    Django1.8.2中文文档:Django1.8.2中文文档 上传图片 配置上传文件保存目录 1)新建上传文件保存目录. 2)配置上传文件保存目录. 后台管理页面上传图片 1)设计模型类. 2)迁移 ...