使用gitee的webhook实现提交代码后自动部署项目

独立站原文

业务背景

giteeAction付费,gitPages也停止了服务,没办法想搞一个国内服务器的独立站只能自己动手了,看了gitee提供了webhook👌那一切就很简单了
在这里插入图片描述

部署架构

在这里插入图片描述

  • 用户做提交代码等操作时,如果满足webhook条件则会发送webhook请求到固定的服务器路由
  • 服务器路由接收到之后就更新git仓库(go 提供服务,真的很方便)
  • 然后生成静态文件部署到nginx

webhook设置

在这里插入图片描述
选择触发事件以及服务路由即可,触发对应事件的时候就会走POST调用

go编写web服务

真的比java快速且方便很多,需要加密自己写即可

package main

import (
    "fmt"
    "log"
    "net/http"
    "os/exec"
)

func webhookHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method == http.MethodPost {
        // 解析 Webhook 请求的内容
        // 这里只是简单的示例,实际情况可能需要更多的处理
        body := r.Body
        defer body.Close()
        // 你可以根据需要解析请求体中的信息

        // 执行 Shell 命令
        cmd := exec.Command("/bin/bash", "-c", "./deploy.sh")
        output, err := cmd.CombinedOutput()
        if err != nil {
            http.Error(w, "Failed to execute command", http.StatusInternalServerError)
            log.Println("Command execution error:", err)
            return
        }

        // 输出执行结果
        fmt.Fprintf(w, "Command executed successfully: %s", output)
    } else {
        http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
    }
}

func main() {
    http.HandleFunc("/webhook", webhookHandler)
    log.Println("Starting server on :8080")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

部署脚本

#!/bin/bash

# 定义路径
path="/opt/webhook/blue-whale/"
deployPath="/opt/www/blueWhale/"
gitPath="git@gitee.com:jzwPro/blue-whale.git";

# 检查文件夹是否存在
if [ ! -d "${path}" ]; then
    echo "Directory does not exist. Cloning the repository..."
    # 从 Git 仓库克隆项目
    git clone ${gitPath} "${path}"
else
    echo "Directory exists. Pulling the latest changes..."
fi

cd "${path}" || exit
git pull

# 生成 Hugo 静态文件
/opt/hugo/hugo

# 删除目标目录及其内容(如果存在)
rm -rf "${deployPath}"
mkdir -p "${deployPath}"

# 复制生成的静态文件到目标目录
cp -r ./public/* "${deployPath}"

echo "Deployment completed successfully."
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小贾Coder

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

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

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

打赏作者

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

抵扣说明:

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

余额充值