如何实现Git Push之后自动部署到服务器?

在平时个人开发的过程中是不是有这样的烦恼:

项目开发完成,Push之后

登录服务器,手动git pull,然后运行部署命令

这真的很烦诶!

那么能不能Git push之后,远端服务器自动 Git pull 然后运行部署命令呢?

答案当然是可以的!

这就要请出我们的秘密武器啦!

分析

先分析一波,自动化部署需要实现以下功能:

  • 监听代码仓库的变动。
  • 当检测到代码更新时,自动拉取最新代码。
  • 运行必要的构建和测试脚本。
  • 将构建产物部署到服务器。

而实现这一切的前提,就是GitHub 提供的WebHook。

img

WebkHook提供了一种通知web服务器有关仓库变更有关的事件,你可以简单理解为:

git仓库发生了变化,包括但不限于push、pull、fork等等

git官方服务器会发送一个请求到你设置webHook链接

*你根据这个请求对应的事件进行*操作。

动手

第一步:配置Webhooks

直接上手吧,在repo-setting设置webHook,例如:http://your-server-ip:3000/webhook

img

在你的Git仓库(如GitHub)中,找到Webhooks设置,添加一个新的Webhook。Payload URL设置为你服务器上的一个URL,例如http://your-server-ip:3000/webhook

第二步:创建监听服务

(你也可以使用python、php、golang,anyway)

在服务器上创建一个Node.js应用来监听Webhook的POST请求。创建一个webhook-listener.js文件,并写入以下内容:

const express = require('express');
const bodyParser = require('body-parser');
const cmd = require('node-cmd');const app = express();
const port = 3000; // Webhook监听端口app.use(bodyParser.json());app.post('/webhook', (req, res) => {// 这里需要验证Webhook的secret,这个示例中省略了验证步骤if (req.headers['x-github-event'] === 'push') {cmd.get('git pull', (err, data) => {if (err) {console.error(err);res.status(500).send('Server Error');return;}cmd.get('yarn install', (err, data) => {if (err) {console.error(err);res.status(500).send('Server Error');return;}cmd.get('yarn run build', (err, data) => {if (err) {console.error(err);res.status(500).send('Server Error');return;}cmd.run('serve -s build -l 3003');console.log('Deployment completed');res.status(200).send('OK');});});});} else {res.status(200).send('Received');}
});app.listen(port, () => {console.log(`Webhook listener running on port ${port}`);
});

运行该脚本:

node webhook-listener.js

这将启动一个监听3000端口的服务,等待GitHub的Webhook通知。

(端口你可以自行指定)

第五步:测试Webhook

推送代码到你的Git仓库,以测试Webhook是否正确触发了自动部署脚本。

如果一切设置正确,你应该能够在服务器上看到自动拉取代码并执行构建和部署的过程。

完结

你,学废了吗?

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

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

相关文章

2024阿里技术官重磅推出“Java进阶必备宝典” 5大专题 6000字解析

5.JVM实战 CPU占用过高案例实战 内存占用过高案例实战 15种方式编写高效优雅Java程序实战 6.JVM底层技术 亿级流量高井发下GC预估与调优 JHSDB工具透视L ambda底层实现 JVM(HotSpot)核心源码解读 JVM核心模块(GC算法)手写实战 核心三:网络编程与高效IO 1.网络…

还是了解下吧,大语言模型调研汇总

大语言模型调研汇总 一. Basic Language ModelT5GPT-3LaMDAJurassic-1MT-NLGGopherChinchillaPaLMU-PaLMOPTLLaMABLOOMGLM-130BERNIE 3.0 Titan 二. Instruction-Finetuned Language ModelT0FLANFlan-LMBLOOMZ & mT0GPT-3.5ChatGPTGPT-4AlpacaChatGLMERNIE BotBard 自从Cha…

IO Watch:用 Arduino UNO 制造的可编程手表

MAKER:mblaz/译:趣无尽 Cherry(转载请注明出处) 关于手表的项目,之前我们已经介绍过一款《Arduino + 3D 打印 DIY 电子手表》。本期的项目同样的一款基于 Arduino UNO 的可编程的手表,相比之下制造门槛更高一些。同时它更成熟、实用,外形也很有设计感,非常的漂亮! 这…

探索谷歌的秘密花园:Google文件系统GFS之旅(Google File System)

文章目录 🏘️GFS系统架构GFS系统节点类型GFS实现机制 🍎GFS特点采用中心服务器模式不缓存数据在用户态下实现只提供专用接口 容错机制⚒️Master容错机制🔄 Chunk Server容错 🛠 系统管理技术 🏘️GFS系统架构 大型分…

IDEA开启Run Dashboard

1、Run Dashboard是什么,为什么要使用 Run Dashboard 是 IntelliJ IDEA 中的一个工具窗口,用于管理和监视项目中正在运行的应用程序和配置。它提供了一种集中管理运行和调试过程的方式,可以让开发人员更方便地查看和控制正在运行的应用程序。…

kubernetes-污点和容忍

kubernetes-污点和容忍 kubernetes-污点和容忍1、什么是污点(Taint)2、什么是容忍度(Toleration)3、为什么master节点上不跑业务pod4、这种打污点让我想到了通过nodename可以指定node节点5、怎么打污点5.1、基本用法5.2、查了一下chat5.3、effect污点效果的三种状态5.4、打标签…

SQLite—免费开源数据库系列文章目录

SQLite系列相关文章较多特开本文为了便于读者阅读特写了本索引和目录之用本文将不断更新中有需要的读者可以收藏本文便于导航到各个专题( 持续更新中......)。收藏一篇等于收藏一个系列文章 简介类: SQLite——世界上部署最广泛的免费开源数据库(简介&…

一站式数据采集物联网平台:智能化解决方案,让数据管理更高效、更安全

JVS物联网平台的定位 JVS是企业信息化的“一站式解决方案”,其中包括了基础的数字化底座、各种企业级能力、企业内常见的应用,如下图所示: 整体平台能力层有三大基础能力: 低代码用于业务的定义;数据分析套件用于数据的自助式分…

渗透某巨型企业某个系统的奇葩姿势

前言 这个月都在做一个巨型合作企业的渗透测试,这个系统本无方式getshell,得亏我心够细,想的多,姿势够骚。 文中重码,且漏洞已修复。 过程 找到getshell点 目标系统功能很少,基本上就是一个展示页面&a…

C# EPPlus导出dataset----Excel2绘制图像

一、生成折线图方法 /// <summary> ///生成折线图 /// </summary> /// <param name="worksheet">sheet页数据 </param> /// <param name="colcount">总列数</param> /// &l…

如何通过libusb直接向zebra打印机发送zpl,跨平台win/linux

环境&#xff1a;windows & linux & Zebra打印机gt820 windows: 之前安装了Zebra打印机官方驱动&#xff0c;所以先卸载掉驱动。再安装Zadig&#xff0c;用Zadig工具来安装WinUSB驱动。 zadig下载&#xff1a;Zadig - USB driver installation made easy 记住这两个数…

C#制作软件时窗体的弹出与嵌入

文章目录 一、窗体的弹出二、窗体的嵌入 一、窗体的弹出 这里面我们以Windows窗体应用程序为例&#xff0c;这里面达到的效果如下&#xff1a; 点击指定按钮&#xff0c;弹出目标窗口。接下来我们看具体操作&#xff1a; 这是我们的主窗体&#xff1a; 接下来我们需要在这个…