梦想博客

Github Webhook终极解决方案

· 860 words · 2 minutes to read
Categories: github
Tags: github 运维

Github使用Webhook功能实现自动更新 这篇文章中,粗略的实现了如何运用github的webhook钩子来实现自动化编译部署的情况

随着在公司项目中的运用越来越多,以及需要前后端各自进行操作,将shell命令硬编码至C#源码中是及其不明智的选择,在上个月底即开始了对github webhook的程序更新,只是由于些原因搁置

恰好今晚有空,来操作一下

必要的东西 🔗

  • 必须可以通过webapi调用sh脚本来实现功能,webapi仅实现粗略的解析数据和参数给脚本
  • 必须可以通过二级github webhook代理来实现特殊网络下的中转
  • sh脚本运行时应该采用企业微信推送的方式来告知目前进行到哪一步

展示 🔗

当webapi处理成功时固定响应200,500时必定返回错误的信息以供查看



脚本都放入这里,名称为仓库名,注意:linux中敏感大小写,请注意大小写区分


这里只提供sh脚本,请自行修改

.net webapi的自动化编译

#!/bin/bash

# 定义git代码文件所存放的位置
SOURCE_PATH="/var/project";
# 项目存放位置
APPLICATION="/var/webapi/GaoXinCashApi";

################################### 以下代码无需修改 ###################################

# 克隆仓库的url
CLONEURL=$1
# 仓库名称
REPOSITORYNAME=$2
# 分支名称
BRANCHENAME=$3
# 企业微信bot
WEBHOOK_URL=$4
# 文件夹路径
SOURCEPATH="$SOURCE_PATH/$REPOSITORYNAME"

# 函数定义:发送企业微信消息
send_wechat_message() {
    local message=$1

    # JSON 格式的 payload
    local json_payload=$(cat <<EOF
{
    "msgtype": "markdown",
    "markdown": {
        "content": "[$BRANCHENAME]-$REPOSITORYNAME\n$message"
    }
}
EOF
    )

    # 使用 curl 发送 POST 请求
    curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=$WEBHOOK_URL" \
         -H "Content-Type: application/json" \
         -d "$json_payload"
}

send_wechat_message "git pull"

# 检查目录是否存在,不存在则创建
if [ ! -d "$SOURCEPATH" ]; then
    mkdir -p $SOURCEPATH
    git clone $CLONEURL $SOURCEPATH
else
    cd $SOURCEPATH
    git pull || { send_wechat_message "Failed to pull from repo"; exit 1; }
fi

cd $SOURCEPATH
# 切换分支
git switch $BRANCHENAME || { send_wechat_message "Failed to switch branch"; exit 1; }


################################### 以上代码无需修改 ###################################
send_wechat_message "dotnet publishing"
# 编译
dotnet publish -r linux-x64 -c Debug -p:PublishSingleFile=true --self-contained true -o ./publish


send_wechat_message "dotnet publish completed"

# 配置文件全部删除
rm -r ./publish/config
rm ./publish/appsettings.json

# 将编译好的文件移动到指定目录
rsync -av "$SOURCEPATH/publish/" "$APPLICATION/"

# 删除本次编译后的文件
rm -r "$SOURCEPATH/publish/"

# 赋予执行权限
chmod +x "$SOURCEPATH/publish/GaoXinCashShop.Admin"
chmod +x "$SOURCEPATH/publish/GaoXinCashShop.Api"

# 服务重启
systemctl restart cashshop
systemctl restart shopadmin

send_wechat_message "ok"

vue3的自动化编译

if ! npm install; then
	send_wechat_message "npm install 失败。"
	exit 1
fi

# 运行 npm run build:testing 并检查结果
if ! npm run build:testing; then
	send_wechat_message "npm run build:testing 失败。"
	exit 1
fi
# 删除旧的文件
rm -r $APPLICATION/*
# 将编译好的文件移动到指定目录
rsync -av $SOURCEPATH/dist/* $APPLICATION/ || { send_wechat_message "Failed to move files"; exit 1; }

另外附上来自大佬的评价




当然还有大佬推荐的项目,看起来感觉挺香但是我的都已经写好了,那就没必要放这里了2333

Categories