代码 拉取_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,一经查实,立即删除!

相关文章

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个月&…

python天蝎座-day1笔记

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

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…

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

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

JMter随记

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

OSPF协议概述(一)

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

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

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

Silverlight 2.5D RPG游戏技巧与特效处理:(七)动画特写

Silverlight中的HLSL不仅适用于场景与动画渲染&#xff0c;对于游戏中的角色&#xff0c;我们同样可以利用它制作动画特写。较常见的比如角色传送时的淡入淡出、扭曲变形、幻化呈现等切换动画&#xff0c;当然还有例如角色被DeBuff时所表现出来的放大缩小以及虚弱时的不规则体形…

实现搜索功能

准备视图函数search()修改base.html 中搜索输入框所在的<form action"{{ url_for(search) }}" method"get"> <input name"q" type"text" placeholder"请输入关键字">完成视图函数search()获取搜索关键字q re…

mysql下载安装及配置_mysql的下载,安装和配置

顺道向大家介绍一下mysql的安装和配置&#xff0c;mysql数据库应该说是现在整个互联网行业最流行的数据库了&#xff0c;简单易用1.下载&#xff0c;大家可以去官网下载最新的mysql版本&#xff0c;地址&#xff1a;http://dev.mysql.com/downloads/mysql/5.6.html&#xff0c;…

[svc]gns3模拟器及探讨几个bgp问题

模拟器 链接&#xff1a;https://pan.baidu.com/s/1geMcmND 密码&#xff1a;7iir gns0.8.6的版本好用 思科的这个iso好用: c3660-js2-mz.124-21a.bin C2691-AD.BIN(这个也很ok,但是这两个支持的hash算法较少) ctrlshit6 停止命令 R1(config)#crypto isakmp policy 10 R1(confi…

Reverse-engineer Source Code into UML Diagrams

今天同事需要反向生成类图&#xff0c;用PowerDesigner 转了一份&#xff0c;不甚满意&#xff0c;在网上逛了逛&#xff0c;发现在这篇文章挺不错。 I have been on several teams where we studiously designed UML diagrams at the beginning of the project. As the projec…

postman测试带权限接口_接口测试工具:postman

一、postman简介一般简单的接口测试我们可以直接在浏览器里面进行调试&#xff0c;但是涉及到一些要权限设置的就无法操作了&#xff0c;因此我们需接口测试的相关工具&#xff1b;Postman 是一个接口测试和 http 请求的工具。官网下载地址&#xff1a;https://www.getpostman…

记录在Spring-Boot中使用Fegin调用RESTfull的PATCH方法设置

使用了ZooKeeper&#xff0c;设置 spring.cloud.zookeeper.dependency.headers.enabledfalse 参考&#xff1a; https://github.com/spring-cloud/spring-cloud-netflix/issues/2550#issuecomment-353230054 http://blog.csdn.net/menggudaoke/article/details/77884674转载于:…

mysql getcolumnname_jdbc-mysql基础 ResultSetMetaData getColumnName getColumnLabel 得到列的名字和别名...

礼悟&#xff1a;好好学习多思考&#xff0c;尊师重道存感恩。叶见寻根三二一&#xff0c;江河湖海同一体。虚怀若谷良心主&#xff0c;愿行无悔给最苦。读书锻炼强身心&#xff0c;诚劝且行且珍惜。数据、数据&#xff0c;命根就在数据。云计算、AI等技术&#xff0c;都是以数…

spring指导的index.html在spring文件夹中的位置

转载于:https://www.cnblogs.com/whoknows1/p/8094359.html

最近研究Rest,这个东西还是个雏形,给个好用的参考地址吧

http://www.ibm.com/developerworks/cn/education/java/j-rest/section5.html 另附&#xff0c;学习Restlet的网址&#xff1a; http://ajaxcn.iteye.com/category/64734 这个连接地址中的内容&#xff0c;很全&#xff0c;我们会继续研究&#xff0c;会有小例子&#xff0c;敬…

Spring集成Quartz定时任务框架介绍

一、增加所依赖的JAR包1、增加Spring的Maven依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>3.0.5.RELEASE</version></dependency>2、增加Quartz的Maven依赖 <…