This commit is contained in:
parent
5c43bd7a3d
commit
efc5be5142
@ -5,9 +5,11 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
- dev
|
||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
- dev
|
||||||
|
|
||||||
env:
|
env:
|
||||||
# Docker镜像仓库
|
# Docker镜像仓库
|
||||||
@ -41,7 +43,27 @@ jobs:
|
|||||||
- name: 📥 下载代码
|
- name: 📥 下载代码
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
# 步骤2: 安装系统工具 (Docker, curl, jq)
|
# 步骤2: 设置动态环境变量
|
||||||
|
- name: ⚙️ 设置动态环境变量
|
||||||
|
run: |
|
||||||
|
if [ "${{ github.ref_name }}" = "main" ]; then
|
||||||
|
echo "DOCKER_TAG_SUFFIX=latest" >> $GITHUB_ENV
|
||||||
|
echo "CONTAINER_NAME=ppanel-server" >> $GITHUB_ENV
|
||||||
|
echo "DEPLOY_PATH=/root/vpn_server" >> $GITHUB_ENV
|
||||||
|
echo "为 main 分支设置生产环境变量"
|
||||||
|
elif [ "${{ github.ref_name }}" = "dev" ]; then
|
||||||
|
echo "DOCKER_TAG_SUFFIX=dev" >> $GITHUB_ENV
|
||||||
|
echo "CONTAINER_NAME=ppanel-server-dev" >> $GITHUB_ENV
|
||||||
|
echo "DEPLOY_PATH=/root/vpn_server_dev" >> $GITHUB_ENV
|
||||||
|
echo "为 dev 分支设置开发环境变量"
|
||||||
|
else
|
||||||
|
echo "DOCKER_TAG_SUFFIX=${{ github.ref_name }}" >> $GITHUB_ENV
|
||||||
|
echo "CONTAINER_NAME=ppanel-server-${{ github.ref_name }}" >> $GITHUB_ENV
|
||||||
|
echo "DEPLOY_PATH=/root/vpn_server_other" >> $GITHUB_ENV
|
||||||
|
echo "为其他分支 (${{ github.ref_name }}) 设置环境变量"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 步骤3: 安装系统工具 (Docker, curl, jq)
|
||||||
- name: 🔧 安装系统工具 (Docker, curl, jq)
|
- name: 🔧 安装系统工具 (Docker, curl, jq)
|
||||||
run: |
|
run: |
|
||||||
set -e
|
set -e
|
||||||
@ -76,40 +98,29 @@ jobs:
|
|||||||
jq --version
|
jq --version
|
||||||
curl --version
|
curl --version
|
||||||
|
|
||||||
# 步骤3: 打包编译 (直接使用Go构建)
|
# 步骤4: 构建并发布到镜像仓库
|
||||||
- name: 🔨 打包编译
|
- name: 📤 构建并发布到镜像仓库
|
||||||
run: |
|
run: |
|
||||||
echo "开始Go编译..."
|
echo "开始构建并推送镜像..."
|
||||||
echo "版本: ${{ env.VERSION }}"
|
echo "仓库: ${{ env.REPO }}"
|
||||||
echo "构建时间: ${{ env.BUILDTIME }}"
|
echo "版本标签: ${{ env.VERSION }}"
|
||||||
|
echo "分支标签: ${{ env.DOCKER_TAG_SUFFIX }}"
|
||||||
|
|
||||||
echo "开始构建Docker镜像..."
|
# 构建镜像,同时打上版本和分支两个标签
|
||||||
|
|
||||||
# 构建Docker镜像(支持多平台,优化构建参数)
|
|
||||||
docker build -f Dockerfile \
|
docker build -f Dockerfile \
|
||||||
--platform linux/amd64 \
|
--platform linux/amd64 \
|
||||||
--build-arg TARGETARCH=amd64 \
|
--build-arg TARGETARCH=amd64 \
|
||||||
--build-arg VERSION=${{ env.VERSION }} \
|
--build-arg VERSION=${{ env.VERSION }} \
|
||||||
--build-arg BUILDTIME=${{ env.BUILDTIME }} \
|
--build-arg BUILDTIME=${{ env.BUILDTIME }} \
|
||||||
-t ${{ env.REPO }}:${{ env.VERSION }} \
|
-t ${{ env.REPO }}:${{ env.VERSION }} \
|
||||||
|
-t ${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }} \
|
||||||
.
|
.
|
||||||
|
|
||||||
# 创建 latest 标签
|
echo "推送版本标签镜像: ${{ env.REPO }}:${{ env.VERSION }}"
|
||||||
docker tag ${{ env.REPO }}:${{ env.VERSION }} ${{ env.REPO }}:latest
|
|
||||||
|
|
||||||
echo "Docker镜像构建完成"
|
|
||||||
|
|
||||||
# 步骤4: 发布到镜像仓库
|
|
||||||
- name: 📤 发布到镜像仓库
|
|
||||||
run: |
|
|
||||||
echo "开始推送镜像到仓库..."
|
|
||||||
echo "推送镜像: ${{ env.REPO }}:${{ env.VERSION }} 和 ${{ env.REPO }}:latest"
|
|
||||||
|
|
||||||
# 推送版本标签镜像
|
|
||||||
docker push ${{ env.REPO }}:${{ env.VERSION }}
|
docker push ${{ env.REPO }}:${{ env.VERSION }}
|
||||||
|
|
||||||
# 推送 latest 标签镜像
|
echo "推送分支标签镜像: ${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }}"
|
||||||
docker push ${{ env.REPO }}:latest
|
docker push ${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }}
|
||||||
|
|
||||||
echo "镜像推送完成"
|
echo "镜像推送完成"
|
||||||
|
|
||||||
@ -125,54 +136,62 @@ jobs:
|
|||||||
command_timeout: 600s
|
command_timeout: 600s
|
||||||
script: |
|
script: |
|
||||||
echo "连接服务器成功,开始部署..."
|
echo "连接服务器成功,开始部署..."
|
||||||
|
echo "部署容器名: ${{ env.CONTAINER_NAME }}"
|
||||||
|
echo "部署路径: ${{ env.DEPLOY_PATH }}"
|
||||||
|
echo "部署镜像: ${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }}"
|
||||||
|
|
||||||
|
# 确保部署目录存在
|
||||||
|
mkdir -p ${{ env.DEPLOY_PATH }}/config
|
||||||
|
mkdir -p ${{ env.DEPLOY_PATH }}/logs
|
||||||
|
|
||||||
# 停止并删除旧容器(忽略所有错误)
|
# 停止并删除旧容器(忽略所有错误)
|
||||||
if docker ps -a | grep -q ppanel-server 2>/dev/null; then
|
if docker ps -a | grep -q ${{ env.CONTAINER_NAME }} 2>/dev/null; then
|
||||||
echo "停止旧容器..."
|
echo "停止旧容器..."
|
||||||
docker stop ppanel-server >/dev/null 2>&1 || true
|
docker stop ${{ env.CONTAINER_NAME }} >/dev/null 2>&1 || true
|
||||||
echo "等待容器完全停止..."
|
echo "等待容器完全停止..."
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
echo "删除旧容器..."
|
echo "删除旧容器..."
|
||||||
# 静默删除,完全忽略错误输出
|
# 静默删除,完全忽略错误输出
|
||||||
docker rm ppanel-server >/dev/null 2>&1 || true
|
docker rm ${{ env.CONTAINER_NAME }} >/dev/null 2>&1 || true
|
||||||
sleep 2
|
sleep 2
|
||||||
|
|
||||||
# 如果仍然存在,尝试强制删除(静默)
|
# 如果仍然存在,尝试强制删除(静默)
|
||||||
if docker ps -a | grep -q ppanel-server 2>/dev/null; then
|
if docker ps -a | grep -q ${{ env.CONTAINER_NAME }} 2>/dev/null; then
|
||||||
echo "尝试强制删除..."
|
echo "尝试强制删除..."
|
||||||
docker rm -f ppanel-server >/dev/null 2>&1 || true
|
docker rm -f ${{ env.CONTAINER_NAME }} >/dev/null 2>&1 || true
|
||||||
sleep 3
|
sleep 3
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "容器清理完成,继续部署..."
|
echo "容器清理完成,继续部署..."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 拉取最新镜像
|
# 拉取最新分支镜像
|
||||||
echo "拉取镜像版本: ${{ env.VERSION }}..."
|
echo "拉取镜像: ${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }}..."
|
||||||
docker pull ${{ env.REPO }}:${{ env.VERSION }}
|
docker pull ${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }}
|
||||||
|
|
||||||
# 启动新容器
|
# 启动新容器
|
||||||
echo "启动新容器..."
|
echo "启动新容器..."
|
||||||
cd /root/vpn_server
|
cd ${{ env.DEPLOY_PATH }}
|
||||||
docker run -d \
|
docker run -d \
|
||||||
--name ppanel-server \
|
--name ${{ env.CONTAINER_NAME }} \
|
||||||
--restart unless-stopped \
|
--restart unless-stopped \
|
||||||
--network host \
|
--network host \
|
||||||
-v ./config/ppanel.yaml:/app/etc/ppanel.yaml \
|
-v ./config/ppanel.yaml:/app/etc/ppanel.yaml \
|
||||||
-v ./logs:/app/logs \
|
-v ./logs:/app/logs \
|
||||||
${{ env.REPO }}:${{ env.VERSION }}
|
${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }}
|
||||||
|
|
||||||
# 检查容器状态
|
# 检查容器状态
|
||||||
sleep 5
|
sleep 5
|
||||||
if docker ps | grep -q ppanel-server; then
|
if docker ps | grep -q ${{ env.CONTAINER_NAME }}; then
|
||||||
echo "✅ 容器启动成功"
|
echo "✅ 容器启动成功"
|
||||||
else
|
else
|
||||||
echo "❌ 容器启动失败"
|
echo "❌ 容器启动失败"
|
||||||
|
docker logs ${{ env.CONTAINER_NAME }}
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 步骤5: TG通知 (成功)
|
# 步骤6: TG通知 (成功)
|
||||||
- name: 📱 发送成功通知到Telegram
|
- name: 📱 发送成功通知到Telegram
|
||||||
if: success()
|
if: success()
|
||||||
uses: chapvic/telegram-notify@master
|
uses: chapvic/telegram-notify@master
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user