梦想博客

Github Webhook终极解决方案

calendar 2024/05/10
refresh-cw 2024/05/15
903字,2分钟
分类: github
tag github; 运维;

前言 🔗

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

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

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

必要的东西 🔗

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

展示 🔗

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



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


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

.net webapi的自动化编译

 1#!/bin/bash
 2
 3# 定义git代码文件所存放的位置
 4SOURCE_PATH="/var/project";
 5# 项目存放位置
 6APPLICATION="/var/webapi/GaoXinCashApi";
 7
 8################################### 以下代码无需修改 ###################################
 9
10# 克隆仓库的url
11CLONEURL=$1
12# 仓库名称
13REPOSITORYNAME=$2
14# 分支名称
15BRANCHENAME=$3
16# 企业微信bot
17WEBHOOK_URL=$4
18# 文件夹路径
19SOURCEPATH="$SOURCE_PATH/$REPOSITORYNAME"
20
21# 函数定义:发送企业微信消息
22send_wechat_message() {
23    local message=$1
24
25    # JSON 格式的 payload
26    local json_payload=$(cat <<EOF
27{
28    "msgtype": "markdown",
29    "markdown": {
30        "content": "[$BRANCHENAME]-$REPOSITORYNAME\n$message"
31    }
32}
33EOF
34    )
35
36    # 使用 curl 发送 POST 请求
37    curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=$WEBHOOK_URL" \
38         -H "Content-Type: application/json" \
39         -d "$json_payload"
40}
41
42send_wechat_message "git pull"
43
44# 检查目录是否存在,不存在则创建
45if [ ! -d "$SOURCEPATH" ]; then
46    mkdir -p $SOURCEPATH
47    git clone $CLONEURL $SOURCEPATH
48else
49    cd $SOURCEPATH
50    git pull || { send_wechat_message "Failed to pull from repo"; exit 1; }
51fi
52
53cd $SOURCEPATH
54# 切换分支
55git switch $BRANCHENAME || { send_wechat_message "Failed to switch branch"; exit 1; }
56
57
58################################### 以上代码无需修改 ###################################
59send_wechat_message "dotnet publishing"
60# 编译
61dotnet publish -r linux-x64 -c Debug -p:PublishSingleFile=true --self-contained true -o ./publish
62
63
64send_wechat_message "dotnet publish completed"
65
66# 配置文件全部删除
67rm -r ./publish/config
68rm ./publish/appsettings.json
69
70# 将编译好的文件移动到指定目录
71rsync -av "$SOURCEPATH/publish/" "$APPLICATION/"
72
73# 删除本次编译后的文件
74rm -r "$SOURCEPATH/publish/"
75
76# 赋予执行权限
77chmod +x "$SOURCEPATH/publish/GaoXinCashShop.Admin"
78chmod +x "$SOURCEPATH/publish/GaoXinCashShop.Api"
79
80# 服务重启
81systemctl restart cashshop
82systemctl restart shopadmin
83
84send_wechat_message "ok"

vue3的自动化编译

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

另外附上来自大佬的评价




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

分类