代码 拉取_Git 利用 Webhooks 实现代码的自动拉取

fb419633070ecb3e79213dad7bc03829.png

WebHook 简介

WebHook 功能是帮助用户 push 代码后,自动回调一个您设定的 http 地址。 这是一个通用的解决方案,用户可以自己根据不同的需求,来编写自己的脚本程序。

环境

服务器:ubuntu
php:7.2.28

本文以拉取码云(github、Coding等均适用)为例,利用WebHook实现PHP自动部署Git代码。
因为PHP脚本涉及到shell命令执行,所以要删除php.ini里面的禁用函数:exec、shell_exec等。

cc5bf2606b4c89f5ccab995c0d523bc7.png

由于权限问题,所以,需要为目录和文件设置拥有者、所属组。

sudo chown -R www:www /www/wwwroot/choudalao

生成公钥

公钥分为

  1. git用户公钥(SSH公钥),
  2. 部署公钥。

SSH公钥

// 换成自己的邮箱
ssh-keygen -t rsa -C "1937832819@qq.com"

845902e8f06d651b5b5270102f7d6e95.png


查看并复制

sudo cat /home/ubuntu/.ssh/id_rsa.pub

e620034c28615500da8370f933dffee4.png

打开码云,点击头像下拉框的设置。新建一个SSH公钥。

f81db2b3d9029afce2401866f1f7e4f5.png

5ce647c558f77ab6b97b86920056ea83.png

如果绑定邮箱,添加成功会受到一条邮件。

2243eb2998219ba5f753a60e34263533.png

部署公钥

// 创建 .ssh目录
sudo mkdir /home/www/.ssh
// 将目录 .ssh 的拥有者、所属组修改为 www(如果已经是就不用改了)
sudo chown -R www:www /home/www/.ssh
// 在 /home/www/.ssh 目录下生成密钥,邮箱请与码云上一致
sudo -Hu www ssh-keygen -t rsa -C "1937832819@qq.com"

7ff47c2151e3afad1968686814bb02e9.png

9fc891e867302ccb3b6b0ae68d1b2228.png


成功后,查看并复制

// 部署公钥生成后,执行下面的代码查看公钥,复制
sudo cat /home/www/.ssh/id_rsa.pub

码云上回到我们的项目目录,复制粘贴我们的项目公钥。

b468640e13a4d3fe34ffea34b57b5a37.png

git 的全局配置

sudo -Hu www git config --global credential.helper store # 永久保存
sudo -Hu www git config --global user.name "1937832819@qq.com" 
sudo -Hu www git config --global user.email "1937832819@qq.com" # 邮箱请与码云上一致

配置完成之后可以 clone 或 pull 项目来验证是否配置成功(注意:要切换成www运行用户来进行操作),若多次操作只需输入一次用户名、密码,即配置成功,若每一次操作都有输入用户名密码,则配置不成功,需要重新检查配置。

仓库配置

打开码云的项目,管理,然后对WebHook进行配置,大概如下

188d80aee93f43968e34ed87ddeb8f34.png

钩子代码

编辑web_hook.php文件

<?php
/*** Description:钩子* Created by PhpStorm.* User: Vijay <1937832819@qq.com>* Date: 2020/4/29* Time: 22:27*/// 接收码云POST过来的信息
$json = $GLOBALS['HTTP_RAW_POST_DATA'];
$data = json_decode($json, true);// 打开网站目录下的hooks.log文件 需要在服务器上创建 并给写权限
$fs = fopen('./data/logs/webhooks_pull.log', 'a');
fwrite($fs, '================ Update Start ===============' . PHP_EOL . PHP_EOL);
// 自定义密码 用于验证 与码云后台设置保持一致
$access_token = 'zkym';
$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);
fwrite($fs, 'php belongs to [' . system("whoami") . ']' . 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命令,cd到网站根目录,执行git pull进行拉取代码,并把返回信息写进日志
exec('cd /www/wwwroot/choudalao; git pull 2<&1; chown -R www:www /www/wwwroot/choudalao/*;', $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);

调试

大部分已经完成了,接下来我们来测试一下,

本地修改并提交

git commit -am's'

c7e1417daefa80807c160650eaf1a33c.png
git push

c185ba1597c55409c93542246b303196.png

查看我们的日志文件

0c61d102f2e4f08fe8fd8ee17ef4acc5.png

发现有一个报错

fatal: could not read Username for 'https://gitee.com': No such device or address

这是因为git config文件中没有用户身份信息

解决方法

在请求串中加入身份信息即可:
格式

@gitee.com/[username]/project.git"">https://[userName]:[password]@gitee.com/[username]/project.git

cd .git
vim config

0623e26c4b76f9949f0a5ead6a960ea5.png

本地再次推送,查看日志。

943854377b5a8d5bc2fb61572c9f1d48.png

大功靠成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git 分布式版本控制常用命令(1)

安装完成后,标定自己身份,配置自己的姓名与邮箱git config --global user.name "Name" git config --global user.email "examplemail.com" 初始化Git仓库git init 添加文件到Git仓库git add <file> git commit -m "Add some comment" 查看…

数据结构最短路径例题_数据结构算法实验8图的最短路径问题附源代码.doc

浙江大学城市学院实验报告课程名称 数据结构与算法实验项目名称 实验八 图的最短路径问题实验成绩 指导老师(签名 ) 日期实验目的和要求掌握图的最短路径概念。理解并能实现求最短路径的DijKstra算法(用邻接矩阵表示图)。二. 实验内容1、编写用邻接矩阵表示有向带权图时图的基本…

navicat连接mysql报10061错

可能原因&#xff1a;mysql服务未启动 解决办法&#xff1a;进入到计算机管理&#xff0c;找到服务&#xff0c;然后找到mysql服务&#xff0c;并启动该服务 转载于:https://www.cnblogs.com/mengyinianhua/p/8041201.html

长牙顺序

20个乳牙宝宝的诞生是有顺序的&#xff0c;虽然不一定一成不变&#xff0c;但是也可以作为参照的依据。 1.下乳中切牙 2.上乳中切牙 3.上乳侧切牙 4.下乳侧切牙 5.下第一乳磨牙 6.上第一乳磨牙 7.下乳尖牙 8.上乳尖牙 9.下第二乳磨牙 10.上第二乳磨牙 5~10个月&…

疲劳容器的定义_材料疲劳

结构力学材料疲劳什么是材料疲劳&#xff1f;材料疲劳 是一种结构在循环载荷作用下出现失效的现象。即使材料受到的应力远低于材料的静态强度&#xff0c;也可能会发生这种类型的结构损伤。疲劳是造成机械结构失效最常见的原因。组件在反复载荷作用下导致最终失效的过程&#x…

python天蝎座-day1笔记

一、接口测试即功能测试 最常见&#xff1a; get post 二、jmeter参数化有三种方法&#xff1a; 1、jmeter-选项-函数助手对话框-random-输入最小值和最大值&#xff0c;生成-将生成的函数字符串赋值到需要函数化的参数 2、添加配置元件&#xff1a;CSV Data Set Config&#x…

国产海量存储系统的新突破

3月8—14日&#xff0c;“十一五”国家重大科技成就展在北京国家会议中心举行。本次展览集中展出了一批对国民经济和社会发展有着重大影响、具有重大创新与突破和自主知识产权的重大标志性项目。 本次参展的项目约600项&#xff0c;参展实物近1000件&#xff0c;模型150多件。信…

软件工程电商系统数据库定义_某个电子商务系统项目的数据库设计

杨教授工作室&#xff0c;版权所有&#xff0c;盗版必究&#xff0c;1/13页11.1EbookStore/EBank项目的数据源设计1.1.1本项目中的数据库设计概述1、数据库设计(1)数据库设计方法一般数据库设计方法有两种,即属性主导型和实体主导型。属性主导型从归纳数据库应用的属性出发,在…

MYSQL高可用-Percona XtraDB Cluster

简介 Percona XtraDB Cluster是MySQL高可用性和可扩展性的解决方案&#xff0c;Percona XtraDB Cluster提供的特性如下&#xff1a; 1).同步复制&#xff0c;事务要么在所有节点提交或不提交。 2).多主复制&#xff0c;可以在任意节点进行写操作。 3).在从服务器上并行应用事件…

python 矩阵点乘_Day276:普通乘积、矩阵点乘、克罗内克积

1、普通矩阵乘法(matmul product)假设矩阵A大小是M*N&#xff0c;矩阵B大小是N*P&#xff0c;CAB这里选取一个例子这里的矩阵乘法要求相乘的两个矩阵一个的行数得等于另一个的列数&#xff0c;否则&#xff0c;无法进行乘机运算。2、矩阵点乘(hadamard product)矩阵点乘&#x…

java编程笔记18 文件压缩与解压缩

在java中&#xff0c;主要是利用ZipEntry&#xff0c;ZipInputStream和ZipOutputStream来实现zip数据压缩方式的编程方法&#xff0c; 构造方法摘要ZipEntry(String name) 使用指定名称创建新的 ZIP 条目。构造方法摘要ZipInputStream(InputStream in) 创建…

随机排列_图片视频特效一键生成,27 种特效可随机排列组合!

酷友们&#xff0c;大家好&#xff01;相信很多酷友喜欢刷抖音&#xff0c;抖音视频中有很多特效也很酷。其实这些特效称作故障艺术(Glitch Art)&#xff0c;就是利用事物形成的故障&#xff0c;进行艺术加工&#xff0c;使这种故障缺陷反而成为一种艺术品&#xff0c;具有特殊…

JMter随记

线程组&#xff08; Threads &#xff08;Users&#xff09;&#xff09;理解&#xff1a;一个虚拟用户组&#xff0c;线程组内线程数量在运行过程中不会发生改变。 注意事项&#xff1a;线程间变量相互独立。 一个测试计划内可以包含多个线程组。 可定义内容&#xff1a; 取样…

爱情 by叶挺王

所有的路 都是为你而铺设 所有的桥 都是为你而架备 所有的亭宇 都是为你而营造 所有的愿望 都是为你而存在 你是我的所有 为此 我日夜忧愁 漫漫长路 只怕你眷恋身后 危危廊桥 只怕你惊于飞流 幽幽楼阁 只怕你凄怨逗留 小小心愿 只怕你未能实现 为你忧愁 然而 我愿意 我愿意是路…

mysql 数据回滚_Mysql数据误删除快速回滚

作者 | Video极链科技OPSTeam整理 | 包包在数据库操作中&#xff0c;难免会因为各种各样的原因对数据造成损坏&#xff0c;这个时候就需要对数据库快速恢复。传统的方法会先恢复mysql备份&#xff0c;再去用mysqlbinlog抽取指定时间点的日志&#xff0c;再恢复&#xff0c;这样…

js 类数组arguments详解

arguments并不是一个真正的数组&#xff0c;而是一个“类似数组&#xff08;array-like&#xff09;”的对象&#xff1b; 就像下面的这段输出&#xff0c;就是典型的类数组对象&#xff1a; [12, 23, callee: ƒ, Symbol(Symbol.iterator): ƒ] 一、类数组 VS 数组 相同点&…

OSPF协议概述(一)

1. 根据来源不同&#xff0c;路由表中的路由通常可以分为以下三类: 链路层协议发现的路由&#xff08;也称为接口路由或直连路由&#xff09;。 由网络管理员手工配置的静态路由 动态路由协议发现的路由。&#xff08;RIP,OSPF,IS-IS&#xff09; 2. 距离矢量算法和…

深度工作:充分使用每一份脑力

浮躁已经成了普遍的社会现象。判断一个人是否浮躁非常容易&#xff0c;看他一天主动拿起手机的次数就可以了。据TED的演讲者说&#xff0c;这个值一般是50次&#xff0c;除了8小时的睡觉之外&#xff0c;基本上每20分钟就要去翻翻手机。 你会去用手机做什么&#xff1f;看微信&…

mysql表碎片空间计算_一篇介绍表空间碎片产生,计算和解决的文章。

一篇介绍表空间碎片产生&#xff0c;计算和解决的文章。我们知道&#xff0c;oracle作为一种大型数据库&#xff0c;广泛应用于金融、邮电、电力、民航等数据吞吐量巨大&#xff0c;计算机网络广泛普及的重要部门。对于系统管理员来讲&#xff0c;如何保证网络稳定运行&#xf…

Python自动化--语言基础5--面向对象、迭代器、range和切片的区分

面向对象 一、面向对象代码示例&#xff1a; 1 class Test(): #类的定义2 car "buick" #类变量&#xff0c;定义在类里方法外&#xff0c;可被对象直接调用&#xff0c;具有全局效果3 def __init__(self): #构造方法4 self.na…