From efc5be5142b273df4928cc383e2784284fc776ea Mon Sep 17 00:00:00 2001 From: shanshanzhong Date: Mon, 29 Sep 2025 17:32:10 -0700 Subject: [PATCH] maindev --- .gitea/workflows/docker.yml | 93 ++++++++++++++++++++++--------------- 1 file changed, 56 insertions(+), 37 deletions(-) diff --git a/.gitea/workflows/docker.yml b/.gitea/workflows/docker.yml index a99f1e8..85427c5 100644 --- a/.gitea/workflows/docker.yml +++ b/.gitea/workflows/docker.yml @@ -5,9 +5,11 @@ on: push: branches: - main + - dev pull_request: branches: - main + - dev env: # Docker镜像仓库 @@ -41,7 +43,27 @@ jobs: - name: 📥 下载代码 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) run: | set -e @@ -76,40 +98,29 @@ jobs: jq --version curl --version - # 步骤3: 打包编译 (直接使用Go构建) - - name: 🔨 打包编译 + # 步骤4: 构建并发布到镜像仓库 + - name: 📤 构建并发布到镜像仓库 run: | - echo "开始Go编译..." - echo "版本: ${{ env.VERSION }}" - echo "构建时间: ${{ env.BUILDTIME }}" - - echo "开始构建Docker镜像..." - - # 构建Docker镜像(支持多平台,优化构建参数) + echo "开始构建并推送镜像..." + echo "仓库: ${{ env.REPO }}" + echo "版本标签: ${{ env.VERSION }}" + echo "分支标签: ${{ env.DOCKER_TAG_SUFFIX }}" + + # 构建镜像,同时打上版本和分支两个标签 docker build -f Dockerfile \ --platform linux/amd64 \ --build-arg TARGETARCH=amd64 \ --build-arg VERSION=${{ env.VERSION }} \ --build-arg BUILDTIME=${{ env.BUILDTIME }} \ -t ${{ env.REPO }}:${{ env.VERSION }} \ + -t ${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }} \ . - # 创建 latest 标签 - docker tag ${{ env.REPO }}:${{ env.VERSION }} ${{ env.REPO }}:latest - - echo "Docker镜像构建完成" - - # 步骤4: 发布到镜像仓库 - - name: 📤 发布到镜像仓库 - run: | - echo "开始推送镜像到仓库..." - echo "推送镜像: ${{ env.REPO }}:${{ env.VERSION }} 和 ${{ env.REPO }}:latest" - - # 推送版本标签镜像 + echo "推送版本标签镜像: ${{ env.REPO }}:${{ env.VERSION }}" docker push ${{ env.REPO }}:${{ env.VERSION }} - # 推送 latest 标签镜像 - docker push ${{ env.REPO }}:latest + echo "推送分支标签镜像: ${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }}" + docker push ${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }} echo "镜像推送完成" @@ -125,54 +136,62 @@ jobs: command_timeout: 600s script: | 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 "停止旧容器..." - docker stop ppanel-server >/dev/null 2>&1 || true + docker stop ${{ env.CONTAINER_NAME }} >/dev/null 2>&1 || true echo "等待容器完全停止..." sleep 5 echo "删除旧容器..." # 静默删除,完全忽略错误输出 - docker rm ppanel-server >/dev/null 2>&1 || true + docker rm ${{ env.CONTAINER_NAME }} >/dev/null 2>&1 || true 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 "尝试强制删除..." - docker rm -f ppanel-server >/dev/null 2>&1 || true + docker rm -f ${{ env.CONTAINER_NAME }} >/dev/null 2>&1 || true sleep 3 fi echo "容器清理完成,继续部署..." fi - # 拉取最新镜像 - echo "拉取镜像版本: ${{ env.VERSION }}..." - docker pull ${{ env.REPO }}:${{ env.VERSION }} + # 拉取最新分支镜像 + echo "拉取镜像: ${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }}..." + docker pull ${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }} # 启动新容器 echo "启动新容器..." - cd /root/vpn_server + cd ${{ env.DEPLOY_PATH }} docker run -d \ - --name ppanel-server \ + --name ${{ env.CONTAINER_NAME }} \ --restart unless-stopped \ --network host \ -v ./config/ppanel.yaml:/app/etc/ppanel.yaml \ -v ./logs:/app/logs \ - ${{ env.REPO }}:${{ env.VERSION }} + ${{ env.REPO }}:${{ env.DOCKER_TAG_SUFFIX }} # 检查容器状态 sleep 5 - if docker ps | grep -q ppanel-server; then + if docker ps | grep -q ${{ env.CONTAINER_NAME }}; then echo "✅ 容器启动成功" else echo "❌ 容器启动失败" + docker logs ${{ env.CONTAINER_NAME }} exit 1 fi - # 步骤5: TG通知 (成功) + # 步骤6: TG通知 (成功) - name: 📱 发送成功通知到Telegram if: success() uses: chapvic/telegram-notify@master