php项目使用git的webhooks实现自动部署
前言
在项目开发中使用git进行代码的管理,每次完成更改上传代码后,还需要登录服务器将代码拉取下来.现在git服务器(gitee/gitlab/github)都会有Webhooks功能,以实现在向git仓库推送/合并等时机让服务器自动拉取新代码.
流程说明
使用Webhooks后,整个上传部署流程如下:

服务器端操作
webhook脚本创建
关于推送的post数据格式,参考码云的《WebHook 推送数据格式说明》.根据这个参数格式编写php的脚本文件如下:
<?php
/**
*git webhook 自动部署脚本
*/
//接收post参数
$requestBody = file_get_contents("php://input");
if (empty($requestBody)) {
exit('data null');
}
$content = json_decode($requestBody, true);
//验证密码,验证码云上配置的webhook密码
//if (empty($content['password']) || $content['password'] != 'password') //{
// exit('password error');
//}
$path = "/var/www/test/"; //项目存放物理路径
//判断master分支上是否有提交
if ($content['ref']=='refs/heads/master' && $content['total_commits_count']>0) {
$res = shell_exec("cd {$path} && git pull origin master 2>&1");//当前为www用户
$res_log = '------------------------->'.PHP_EOL;
$res_log .= '用户'. $content['user_name'] . ' 于' . date('Y-m-d H:i:s') . '向' . $content['repository']['name'] . '项目的' . $content['ref'] . '分支push了' . $content['total_commits_count'] . '个commit:' . PHP_EOL;
$res_log .= $res.PHP_EOL;
$x = file_put_contents("git_webhook_log.txt", $res_log, FILE_APPEND);//追加写入日志文件
if ($x) {
echo 'true-';
} else {
echo 'false-';
}
}
echo 'done';
服务器用户设置
由于是通过url请求php编写的脚本执行操作,所以打开nginx.conf文件查看执行用户,默认为www,也可在任意php文件中添加代码: echo system("whoami");,然后访问文件查看php运行用户.
确定用户后,打开/etc/passwd文件查看该用户的信息,如下:
www:x:1000:1000::/var/www:/bin/bash
其格式和具体含义如下:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
其中要注意"主目录"这一项,若后续操作提示该目录不存在或错误,打开此文件修改.
接着依次执行下面三条命令:
su - www //切换到www用户
ssh-keygen -t rsa -C "test@gmail.com" //以邮箱为名创建rsa密钥
cat /var/www/.ssh/id_rsa.pub //查看rsa公钥并复制,.ssh所在目录即上面所提"主目录"
git仓库操作
配置部署公钥
在码云上打开项目仓库,依次点击[管理]=>[部署公钥管理]=>[添加公钥].将上面复制的id_rsa.pub公钥添加进来.完成后在服务器上执行命令:
ssh -T git@gitee.com
首次使用会提示the authenticity of host 'gitee.com...需要输入yes确认并添加主机到本机SSH可信列表.若返回 Hi XXX! You've successfully authenticated, but Gitee.com does not provide shell access. 内容,则证明添加成功.添加成功后,当前账户www就可以使用SSH协议对仓库进行克隆/拉取等操作了.
添加webhook
在码云上打开项目仓库,依次点击[管理]=>[WebHooks]=>[添加],填写webhook的php脚本地址,如有需要填写webhook密码/密钥(密钥需要再添加验签),如下图

到此,完成配置,之后的push操作可在码云[WebHooks 管理]中查看自动部署请求记录信息.也可查看服务器中的git_webhook_log.txt部署日志(php脚本中写入,不需要可注释掉).
个人网站地址: https://www.zhuyilong.我爱你/tech/php_git_webhook.html
php项目使用git的webhooks实现自动部署的更多相关文章
- windows环境下利用Gitblit搭建Git服务器并实现自动部署Web站点目录
Git服务搭建多见于linux环境,但windows主机也不少,目前网上文章诸多不全,且以讹传讹,不甚清楚.下面介绍windows环境下的自动部署和发布. 所需环境及资源:Java环境.Gitblit ...
- 服务器(三):利用github的webhooks实现自动部署
实现自动部署的关键就是利用github的webhooks,我们在github建立一个项目之后,在项目主页点击Settings,看到Webhooks点击打开可以添加一个链接,这里的意思是,github可 ...
- 初始化git库并配置自动部署
1.初始化库 git init --bare wap.git 2.配置wap.git/config文件 [core] repositoryformatversion = 0 filemode = tr ...
- Jenkins+Git的搭建和自动部署
前言 Jenkins在工作中都使用过,之前都是运维去搭建部署,弄好了之后给我一个网址去构建项目就可以了,所以也都是一直没了解过安装过程. 今天在自己的服务器上搭建了一遍,中间有遇到很多坑,特在此归纳总 ...
- git利用hooks实现自动部署
准备工作: 1.一台虚拟linux环境和window 开始工作 1.安装git(略) 2.创建git用户和创建test.git裸仓库 [root@localhost ~]# useradd -m gi ...
- 基于webhook方案的Git自动部署方案
之前已经用Git实现了自己博客的提交自动部署,并自动提交到GitHub和coding以备不时之需.平时项目代码都托管在Coding或者GitHub上,也已经用上了coding提供的webhook功能, ...
- GIT服务器实现web代码自动部署
之前在一台vps服务器上面搭建了Git服务器,用来做代码管理,方便团队开发.但是问题也就相应的来了,使用git可以轻松的上传代码,而由于做的是web开发,每次还都得到服务器上把代码手动pull或者复制 ...
- git管理和自动部署项目
当一个项目需要纳入到版本控制的时候,选择的工具还是比较多的,最常见的就是工具有CVS,SVN,GIT等.在平时的开发中视情况而定,从来就没有最好的版本控制工具,只有最适合的工具.在这里我习惯用git来 ...
- centos 安装git服务器,配置使用证书登录并你用hook实现代码自动部署
安装git服务器先安装依赖软件:yum -y install gcc zlib-devel openssl-devel perl cpio expat-devel gettext-devel open ...
随机推荐
- 04 . Go+Vue开发一个线上外卖应用(用户名密码和图形验证码)
图形化验证码生成和验证 功能介绍 在使用用户名和密码登录功能时,需要填写验证码,验证码是以图形化的方式进行获取和展示的. 验证码使用原理 验证码的使用流程和原理为:在服务器端负责生成图形化验证码,并以 ...
- error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools“
python3 是用 VC++ 14 编译的, python27 是 VC++ 9 编译的, 安装 python3 的包需要编译的也是要 VC++ 14 以上支持的. 可以下载安装这个: 链接:htt ...
- Django项目登录注册系统
Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...
- leetcode117:search-rotated-sorted-array
题目描述 给出一个转动过的有序数组,你事先不知道该数组转动了多少 (例如,0 1 2 4 5 6 7可能变为4 5 6 7 0 1 2). 在数组中搜索给出的目标值,如果能在数组中找到,返回它的索引, ...
- Java8 新特性 —— Stream 流式编程
本文部分摘自 On Java 8 流概述 集合优化了对象的存储,大多数情况下,我们将对象存储在集合是为了处理他们.使用流可以帮助我们处理对象,无需迭代集合中的元素,即可直接提取和操作元素,并添加了很多 ...
- javascript多物体运动案例:多物体淡入淡出
javascript多物体运动案例:多物体淡入淡出 任务描述: 补充代码,当鼠标移入红色区域时,该区域透明度逐渐增加至不透明;当鼠标移出该红色区域时,该区域透明度逐渐恢复至初始程度. 效果图: < ...
- [MIT6.006] 7. Counting Sort, Radix Sort, Lower Bounds for Sorting 基数排序,基数排序,排序下界
在前6节课讲的排序方法(冒泡排序,归并排序,选择排序,插入排序,快速排序,堆排序,二分搜索树排序和AVL排序)都是属于对比模型(Comparison Model).对比模型的特点如下: 所有输入ite ...
- vpp dpdk 安装使用笔记
编译安装: make install-dep make build 编译 vpp 查看 pci 网卡 id : lshw -class network -businfo DPDK hugepage ...
- 剑指offer刷题(栈、堆、 队列、 图)
Stack & Queue 005-用两个栈实现队列 题目描述 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 push 和 pop ,分别完成在队列尾部插入整数和在队列头部删除整数 ...
- ceph各个版本之间参数变化分析
前言 本篇主要是分析ceph的版本之间参数的变化,参数变化意味着功能的变化,通过参数来分析增加,删除,修改了哪些功能,以及版本之间的变化,本篇主要通过导出参数,然后通过脚本去比对不同的版本的参数变化 ...