【WebHook】宝塔+gitee+webhook 实现自动拉取代码

原理:

在这里插入图片描述

在我们完成某个功能后,向git推送代码后,git会主动发起一个web请求到我们设置的api,通过api执行shell语句完成git pull的操作


环境配置:

提示:这里以安装了宝塔面板的linux系统为例

账户设置

Gitee发送来的Post请求默认用户为www,需要为`www用户设置公钥`
www用户默认不可登录,通过以下命令暂时登录www用户,切记完成公钥设置后权限改回来

进入权限设置

vi /etc/passwd

找www用户把权限/sbin/nologin改成/bin/bash(切记完成设置后记得改回来)

2. 公钥设置

生成公钥(使用www用户执行)

ssh-keygen -t rsa -C "test@qq.com" # 填自己的邮箱

在这里插入图片描述
查看刚刚生成的公钥,目录可能会变化,注意看控制台输出

cat ~/.ssh/id_rsa.pub

在这里插入图片描述
然后去gitee添加生成的公钥
在这里插入图片描述

配置webhook代码(PHP例子):

不一定使用PHP,只要是能执行shell的api就可以

贴代码:


<?php
header("Content-type: text/html; charset=gb2312");
$requestBody = file_get_contents("php://input");
if (empty($requestBody)) {
    die('error');
}
$content = json_decode($requestBody, true);
if ($content['password'] == 'gitee上面设置的推送密码') {
    exec("cd 网站运行目录;git pull",$res);
    $res_log = '------------------' . PHP_EOL;
    $res_log .= '仓库用户 ' . $content['user_name'];
    $res_log .= ' 在 ' . date('Y-m-d H:i:s');
    $res_log .= ' 向 ' . $content['repository']['name'];
    $res_log .= ' 项目的 ' . $content['ref'] . ' 分支 push 了 ' . $content['total_commits_count'] . ' 个 commit:' . PHP_EOL;
    $res_log .= json_encode($res) . PHP_EOL;
    file_put_contents("webhook_".time().".log", $res_log, FILE_APPEND);
}

其中exec大部分为php禁用函数,需要自行去php.ini中开启。

建议这里的php版本单独使用一个,不与系统执行使用php共用。

然后将url填入gitee的webhooks设置页即可

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
下面是一个简单的 Spring Boot 控制器,用于响应 Shopify 的 Webhook 通知: ```java @RestController public class ShopifyWebhookController { @PostMapping("/webhooks/orders/create") public ResponseEntity<String> handleOrderCreate(@RequestBody String payload, @RequestHeader("X-Shopify-Topic") String topic) { if ("orders/create".equals(topic)) { // 处理订单创建通知 // 解析 payload 并处理相应的业务逻辑 return ResponseEntity.ok("Received order create notification."); } return ResponseEntity.badRequest().build(); } @PostMapping("/webhooks/orders/updated") public ResponseEntity<String> handleOrderUpdate(@RequestBody String payload, @RequestHeader("X-Shopify-Topic") String topic) { if ("orders/updated".equals(topic)) { // 处理订单更新通知 // 解析 payload 并处理相应的业务逻辑 return ResponseEntity.ok("Received order update notification."); } return ResponseEntity.badRequest().build(); } // 处理其他 Shopify 的 Webhook 通知 } ``` 在这个示例中,我们为 Shopify 的订单创建和更新事件创建了两个 POST 路由。当 Shopify 向这些路由发送通知时,控制器中的相应方法将被调用。请求的正文将作为字符串传递给 `@RequestBody` 参数,而 `X-Shopify-Topic` 标头将包含 Shopify 发送的通知主题。 为了使该控制器能够接收 Shopify 的 Webhook 通知,我们需要将公共网址(例如 ngrok 或 Heroku 提供的网址)添加到 Shopify 中。在 Shopify 后台中,我们需要转到“通知”设置,并在“Webhook”选项卡下创建相应的 Webhook。在创建 Webhook 时,我们需要提供 Webhook 的目标 URL(即我们的 Spring Boot 控制器的 URL)和要接收的通知类型。注意,我们需要使用 HTTPS 协议提供 URL。 下面是一个简单的 Webhook 创建示例,用于为 Shopify 的订单创建事件创建 Webhook: ```shell curl -X POST \ https://my-shop.myshopify.com/admin/api/2021-04/webhooks.json \ -H 'Authorization: Basic M2...Nk=' \ -H 'Content-Type: application/json' \ -d '{ "webhook": { "topic": "orders/create", "address": "https://my-app.com/webhooks/orders/create", "format": "json" } }' ``` 此代码将在 Shopify 中创建一个 Webhook,用于在订单创建时向 `https://my-app.com/webhooks/orders/create` 发送通知。在实际使用中,我们需要将 `address` 参数替换为我们应用程序的公共 URL。 需要注意的是,我们还需要将 Shopify API 的访问令牌提供给我们的应用程序,以便我们可以访问 Shopify 的 API 并处理 Webhook 的通知。在此示例中,我们将访问令牌作为 HTTP 授权标头的基本身份验证凭据传递。但是,为了更安全地处理凭据,我们建议使用 OAuth 认证流程来获取访问令牌。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员江河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值