下载鸥 > 网站下载 > 开发教程 > PHP

码云gitee利用PHP脚本拉取实现自动部署

395 2021-06-02 20:00:01

收藏
码云gitee利用PHP脚本拉取实现自动部署
码云gitee利用PHP脚本拉取实现自动部署怎么实现?看过本文,你就懂了。

码云gitee利用PHP脚本拉取实现自动部署

前提

本地git初始化 已完成
 

服务器环境

*PHP 5.4
*Nginx 1.8.0
*GIT version 2.9.4(#git --version)
 

一、添加 Web Hooks

我的码云 -> 点击相应项目A -> 管理-> WebHooks 设置 -> 添加;具体填写内容如下图所示

码云gitee利用PHP脚本拉取实现自动部署
WebHooks 设置
 

二、准备PHP脚本(必须保证浏览器可访问)

不多说,直接帖码。修改好自定义选项,上传服务器后到gitee后台点击测试验证是否通过。
<?php
/**
 * 自动更新钩子
 * 修改验证码及项目路径即可使用,
 * 修改项如下:
 * 1、您的自定义密码
 * 2、/home/wwwroot/app您的项目A路径
 * [冲浪蜗牛](https://www.jianshu.com/u/4913fc14f7fb)
 **/
 
// 接收码云POST过来的信息
$json = $GLOBALS['HTTP_RAW_POST_DATA'];
$data = json_decode($json, true);
 
// 打开网站目录下的hooks.log文件 需要在服务器上创建 并给写权限
$fs = fopen('./../../logs/webhooks_pull.log', 'a');
fwrite($fs, '================ Update Start ===============' . PHP_EOL . PHP_EOL);
// 自定义密码 用于验证 与码云后台设置保持一致
$access_token = '您的自定义密码';
$client_token = $data['password'];
 
// 请求ip
$client_ip = $_SERVER['REMOTE_ADDR'];
// 把请求的IP和时间写进log
fwrite($fs, 'Request on [' . date("Y-m-d H:i:s") . '] from [' . $client_ip . ']' . PHP_EOL);
 
// 验证token 有错就写进日志并退出
if ($client_token !== $access_token) {
    echo "error 403";
    fwrite($fs, "Invalid token [{$client_token}]" . PHP_EOL);
    $fs and fclose($fs);
    exit(0);
}
 
// 如果有需要 可以打开下面,把传送过来的信息写进log 可用于调试,测试成功后注释即可
// fwrite($fs, 'Data: ' . print_r($data, true) . PHP_EOL); 
 
// 执行shell命令并把返回信息写进日志
exec('cd /home/wwwroot/app; git pull 2<&1; chown -R www:www /home/wwwroot/app/*;', $output);
fwrite($fs, 'Info:' . print_r($output, true) . PHP_EOL);
fwrite($fs, PHP_EOL . '================ Update End ===============' . PHP_EOL . PHP_EOL);
$fs and fclose($fs);
 
// 调试时打开
// echo json_encode($output);

pull遇到错误
error: Your local changes to the following files would be overwritten by merge:
执行:git reset --hard 即可
 

三、服务器的设置 (重要)

如果没有给777权限,pull时会报各种权限错误(除非你对用户及用户组权限设置的很到位并可以解决站点www用户组权限的冲突),当然也可以将项目A中的.git目录权限都设置为777,如下命令是我当前使用的具体操作。
// 为了相对安全,我这里针对需要777权限的目录进行设置
cd 项目A/.git
# cd .git
chmod -R 777 FETCH_HEAD
chmod -R 777 ./objects
chmod -R 777 ./refs
chmod -R 777 ./logs
注意: 是.git目录

因为PHP脚本涉及到shell命令执行所有需要php开启exec命令权限
php.ini:

码云gitee利用PHP脚本拉取实现自动部署
开启exec权限,删除红框中的内容保存后重启php服务即可
 

四、可以认真写代码了

执行push的会触发WebHooks,同时推送消息给项目A中WebHooks 设置的请求地址,最后完成服务器的git pull。
git status
# git pull
git push

至此完成码云gitee自动部署。

本文地址:https://xzo.com.cn/develop/php/1010.html

有帮助,很赞!

信息来源:网络
导出教程 下载word版教程
发表评论 共有条评论
关于PHP

PHP是一种服务器端、跨平台、html嵌入式的脚本语言,其功能十分强大、入门简单。在过去,民间一直有说法称“PHP是最好的编程语言”,是PHP开发者对自身所使用语言的肯定。

PHP曾是最主流的网站web开发语言之一,现在也依然十分流行。

推荐PHP开发教程
PHP判断某个时间戳(打卡、点餐、签到等)是不是今天记录的
PHP判断某个时间戳(打卡、点餐、签到等)是不是今天记录的

php判断时间戳是不是今天的实现方法:首先创建一个PHP示例文件;指定一个时间,并...

15 1060
一句话防御首页带问号?的垃圾链接分权重
一句话防御首页带问号?的垃圾链接分权重

任何站点但凡有点流量就会遇到这种情况:首页被人用问号传了参数,恰恰还被收录...

1 436
PHP排序函数sort、asort、rsort、krsort、ksort区别与用法详解
PHP排序函数sort、asort、rsort、krsort、ksort区别与用法详解

在php中自带了大量了数组排序函数,使用起来非常简单,下面我们一一来介绍一下...

3 395
当缓存文件大于4KB,不能用cookie时的替代方案就是session
当缓存文件大于4KB,不能用cookie时的替代方案就是session

鸥哥最近在开发一个项目,出于对用户隐私的保护,数据一概不能存储到数据表,而是...

1 380
php怎样开启debug调试模式?
php怎样开启debug调试模式?

我们使用php开发网站的时候,经常会需要调试确保功能正常。而如果功能出现异...

0 585
什么是高并发,与CPU,内存,分布式有什么关系
什么是高并发,与CPU,内存,分布式有什么关系

我们在网站开发的过程中经常会接触到高并发这个概念,但高并发到底是什么,具体...

1 328
简单的php高并发处理方案分享
简单的php高并发处理方案分享

很多互联网公司对并发要求比较高,如果完全依赖服务器性能的提升,则可能会面临...

0 343
PHP基础函数介绍:PHP_EOL
PHP基础函数介绍:PHP_EOL

PHP_EOL是一个相当好用的函数,可自动适配多种换行格式,在实际的应用中体验非...

0 457
推荐插件
帝国cms自动给正文关键词添加tag内链
帝国cms自动给正文关键词添加tag内链

帝国cms有自带的给关键词添加内链功能,但需要手动添加关键词,容易出现疏漏和...

0 679
帝国cms自动生成文章新闻目录插件下载
帝国cms自动生成文章新闻目录插件下载

用户体验是我们的需求,百度蜘蛛的认可更是我们的需求。毕竟,没有收录排名,何来...

0 988
帝国cms联想词搜索高级搜索插件下载
帝国cms联想词搜索高级搜索插件下载

帝国CMS自带的搜索功能虽然强大,但也有很强的局限性 -- 必须关键词完全匹配...

0 633
帝国cms智能自动审核按星期几审核指定栏目带推送插件
帝国cms智能自动审核按星期几审核指定栏目带推送插件

采集站的必备资源是自动审核,要做到日收录也离不开定时发布。而本插件的自动...

0 1154
帝国cms网站会员登录与退出历史记录日志插件
帝国cms网站会员登录与退出历史记录日志插件

帝国cms默认只有上次登录时间与ip,没有一个记录清单,所以今天,我们分享这个帝...

0 284
帝国CMS内网用户静态站点文章访客统计插件
帝国CMS内网用户静态站点文章访客统计插件

本插件适用于内网用户,可查看单篇文章访问者ip地址。如果添加访问者ip组,可查...

0 463
帝国cms百度AI图像无损放大api接口对接插件
帝国cms百度AI图像无损放大api接口对接插件

通过本插件,可以实现帝国cms网站对接百度云api实现图像无损放大的功能。经过...

0 354
帝国cms百度AI图像去雾api接口对接插件
帝国cms百度AI图像去雾api接口对接插件

通过本插件,可以实现帝国cms网站对接百度云api实现图像去雾的功能。经过实际...

0 374
客服QQ:341553759
扫码咨询 常见问题 >
官方交流群:90432500
点击加入