webhook 自动部署代码
前话: 一般情况,自己在本地开发,代码改动后要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 自动部署代码的更多相关文章
- 关于gitlab+jenkins自动部署代码的实现
本人PHP开发者,项目组大多是PHP,少量java项目. 因公司目前服务器和项目的管理比较混乱,与领导商量后,决定尝试 gitlab+jenkins自动化部署(之前用的svn FTP手动部署代码),解 ...
- 在linux服务器上装svn版本管理,自动部署代码到项目
在linux服务器上装svn版本管理,自动部署代码到项目 http://bbs.aliyun.com/read/9715.html?spm=5176.7114037.1996646101.1.W3zw ...
- 在linux服务器上装svn版本管理,自动部署代码到web项目
在linux服务器上装svn版本管理,自动部署代码到项目 1.安装svn服务器端 yum install subversion 从镜像下载安装svn服务器端 中间会提示是否ok,输入y,确认 ...
- jenkins自动部署代码到多台服务器
下面讲一下如何通过一台jenkins服务器构建后将代码分发到其他的远程服务器,即jenkins自动部署代码到多台服务器. 1.下载 pulish over ssh 插件 2.系统管理 -> 系统 ...
- Jenkins 实现前端自动打包,自动部署代码及邮件提醒功能
在之前的公司,我们前端使用webpack构建项目,项目构建完成后,我们会使用ftp或linux的一些命令工具上传我们的文件到服务器上,这种方式虽然是可以,但是最近面试的时候,人家会问我前端如何部署项目 ...
- window、linux系统与linux服务器之间使用svn同步及自动部署代码的方法
摘要: 在家用PC,在公司用办公电脑对一个项目的代码进行修改时,会遇到代码同步的问题.本文讲解了代码同步及自动部署的解决办法. 实现方法: 1.首先在linux服务器上和linux上安装svn(sud ...
- svn钩子(hooks)自动部署代码到web目录
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/li956732806/article/details/71158869 web目录:/hoe ...
- 宝塔webHook自动同步代码的使用
#!/bin/bashecho ""#输出当前时间date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"echo " ...
- 使用PHP自动部署GIT代码
最近在使用Coding的代码托管,顺便设置了WebHook自动部署,过程还是挺艰辛的,主要还是没搞懂Linux的权限控制,不过好在弄好了,分享一下获益最深的一篇文章,供大家参考,原文是英文版的,我的英 ...
随机推荐
- JavaWeb——使用会话维持状态2
在这次的例子里面,将完成一类似购物车的功能,在客户访问网站的时候,会选中自己将要购买的商品,而购物车将始终维持着商品的状态,会话将联系起选择第一个商品(第一个请求),选择其他商品(其他请求)以及付款等 ...
- Vue中拆分视图层代码的5点建议
目录 一.框架的定位 二. Vue开发中的script拆分优化 1.组件划分 2.剥离业务逻辑代码 3. 剥离数据转换代码 4. 善用computed和filters处理数据展示 5. 使用direc ...
- Javascript中将数字转换为中文的方法
//js实现将数字1234转化为汉字字符串(一千二百三十四)(或大写汉字壹仟贰佰叁拾肆): /*阿拉伯数字转中文数字 中文数字的特点: 每个计数数字都跟着一个权位,权位有:十.百.千.万.亿. 以“万 ...
- 记忆化搜索模板题---leetcode 1155. 掷骰子的N种方法
1155. 掷骰子的N种方法 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, ..., f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数 ...
- Python-PostgreSQL的使用
一.安装PostgreSQL模块 yum install postgresql-devel pip3 install psycopg2 注意:安装时遇到./psycopg/psycopg.h:35:2 ...
- sql server 日期近一年,同比
--近一年 ), , , ) SELECT CONVERT(VARCHAR, DATEADD(day, -DAY(GETDATE()), , ) --同比 ), , , ) SELECT CONVER ...
- spring-boot-plus快速快发脚手架简介
Everyone can develop projects independently, quickly and efficiently! Introduction spring-boot-plus是 ...
- Unity进阶之ET网络游戏开发框架 08-深入登录成功消息
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Flask框架(二)—— 反向解析、配置信息、路由系统、模板、请求响应、闪现、session
Flask框架(二)—— 反向解析.配置信息.路由系统.模板.请求响应.闪现.session 目录 反向解析.配置信息.路由系统.模板.请求响应.闪现.session 一.反向解析 1.什么是反向解析 ...
- 05 requests模块进阶
1. 基于requests模块的代理IP操作 - 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可 ...