maindev
Some checks failed
Build docker and publish / build (20.15.1) (push) Failing after 6m30s

This commit is contained in:
shanshanzhong 2025-09-29 17:32:10 -07:00
parent 5c43bd7a3d
commit efc5be5142

View File

@ -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