前言 🔗
在 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