如何实现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是否正确触发了自动部署脚本。

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

完结

你,学废了吗?

相关文章
|
1天前
|
开发工具 git
【已解决】error: failed to push some refs to ‘git@github.com:BATdalao/Github-green.git‘
【已解决】error: failed to push some refs to ‘git@github.com:BATdalao/Github-green.git‘
7 1
|
5天前
|
存储 开发工具 git
蓝易云 - git中,add到暂存区,commit且push之后,暂存区域里还有内容吗
所以,当你执行 `git add`,然后是 `git commit`,最后是 `git push`之后,暂存区是空的,除非你又执行了新的 `git add`命令来添加更多的更改。
12 1
|
8天前
|
开发工具 git
出现“error: failed to push some refs to ‘https://github.com/****.git‘”,如何解决问题
出现“error: failed to push some refs to ‘https://github.com/****.git‘”,如何解决问题
|
12天前
|
开发工具 git
git push xxx not found问题解决
git push xxx not found问题解决
|
14天前
|
开发工具 git
MAC如何使用Git命令行上传本地项目及理解,failed to push some refs to ‘https://gitee.com/brother-barking/spxx.git
MAC如何使用Git命令行上传本地项目及理解,failed to push some refs to ‘https://gitee.com/brother-barking/spxx.git
|
14天前
|
缓存 开发工具 数据安全/隐私保护
mac git命令行操作 git push pull 逻辑
mac git命令行操作 git push pull 逻辑
|
1月前
|
缓存 网络安全 开发工具
Git服务器报错:host key for (ip地址) has changed and you have requested strict checking
Git服务器报错:host key for (ip地址) has changed and you have requested strict checking
209 0
|
1月前
|
开发工具 git
git怎么设置http代理服务器
git怎么设置http代理服务器
37 12
|
1天前
|
弹性计算
阿里云ECS的使用心得
本文主要讲述了我是如何了解到ECS,使用ECS的一些经验,以及自己的感悟心得
|
1天前
|
弹性计算
阿里云ECS使用体验
在申请高校学生免费体验阿里云ECS云服务器后的一些使用体验和感受。