在 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