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

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

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

项目开发完成,Push之后

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

这真的很烦诶!

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

答案当然是可以的!

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

分析

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

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

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

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

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

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

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

动手

第一步:配置Webhooks

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

在你的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是否正确触发了自动部署脚本。

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

完结

你,学废了吗?

相关文章
|
25天前
|
存储 开发工具 git
[Git] 深入理解 Git 的客户端与服务器角色
Git 的核心设计理念是分布式,每个仓库既可以是客户端也可以是服务器。通过 GitHub 远程仓库和本地仓库的协作,Git 实现了高效的版本管理和代码协作。GitHub 作为远程裸仓库,存储项目的完整版本历史并支持多客户端协作;本地仓库则通过 `.git` 文件夹独立管理版本历史,可在离线状态下进行提交、回滚等操作,并通过 `git pull` 和 `git push` 与远程仓库同步。这种分布式特性使得 Git 在代码协作中具备强大的灵活性和可靠性。
51 18
[Git] 深入理解 Git 的客户端与服务器角色
|
7天前
|
安全 开发工具 git
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
37 18
|
6天前
|
安全 开发工具 git
git分布式版本控制系统及在码云上创建项目并pull和push
通过本文的介绍,我们详细讲解了Git的基本概念和工作流程,并展示了如何在码云上创建项目及进行pull和push操作。Git作为一种分布式版本控制系统,为开发者提供了强大的工具来管理代码变更和协作开发。希望本文能帮助您更好地理解和使用Git及码云,提高开发效率和代码质量。
29 16
|
26天前
|
网络安全 Apache 开发工具
图解Git——服务器上的Git《Pro Git》
Git 远程仓库及通信协议简介:远程仓库为团队协作提供平台,支持共享代码。常见形式为裸仓库,仅保存 Git 元数据。Git 支持多种协议,包括本地协议(适合局域网)、HTTP/HTTPS(推荐智能 HTTP,安全易用)、SSH(企业内部协作首选)和 Git 协议(高效只读访问)。选择协议需根据协作需求、安全性和配置难度权衡。此外,搭建 Git 服务器涉及创建裸仓库、上传至服务器、初始化共享仓库等步骤。生成 SSH 公钥、配置服务器及使用 GitWeb 或 GitLab 等工具可进一步增强功能。第三方托管服务如 GitHub 提供便捷的托管选项,适合快速启动和开源项目。总结而言,自行运行服务器提
37 11
|
3月前
|
网络安全 开发工具 git
解决fatal:remote error:You can’t push to git://github.com/username/*.g
通过上述诊断与修复步骤,绝大多数的推送错误都能得到有效解决,确保您的Git工作流顺畅无阻。
292 1
|
4月前
|
前端开发 开发工具 git
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
59 5
|
5月前
|
Linux 开发工具 数据安全/隐私保护
搭建 Git 私人服务器完整指南
本文详细介绍了如何从零开始搭建一个私人的 `Git` 服务器。首先,文章解释了 `Git` 的概念及其优势,并阐述了搭建私人 `Git` 服务器的重要性,包括数据隐私、定制化需求及成本效益。接着,文章分步骤指导读者完成服务器的准备工作,包括操作系统、硬件和网络要求。随后,详细介绍了在不同操作系统上安装 `Git` 的方法,并演示了如何创建 `git` 用户、部署仓库以及设置免密登录。此外,还提供了客户端连接远程仓库的具体步骤,包括 Linux 和 Windows 的操作方式。最后,文章探讨了迁移仓库的方法以及搭建 `Git` 服务器的一些进阶选项。
1032 0
搭建 Git 私人服务器完整指南
|
5月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
215 4
|
5月前
|
开发工具 git
GIT:如何合并已commit的信息并进行push操作
通过上述步骤,您可以有效地合并已提交的信息,并保持项目的提交历史整洁。记得在执行这些操作之前备份当前工作状态,以防万一。这样的做法不仅有助于项目维护,也能提升团队协作的效率。
311 3
|
6月前
|
开发工具 git 开发者