diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 443eb45..71852f1 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -38,14 +38,40 @@ jobs: registry.bmycode.help/app-product:latest registry.bmycode.help/app-product:${{ github.sha }} + + - name: 替换镜像标签为 github.sha + run: | + sed -i "s|{{IMAGE_TAG}}|${{ github.sha }}|g" app-product.yml + + # 验证替换结果(可选,用于调试) + echo "替换后的 app-product.yml 内容:" + cat app-product.yml + echo "" + + - name: 上传 app-product.yml 到前端集群管理机 + uses: appleboy/scp-action@v1 + with: + host: ${{ vars.SSH_MANAGE }} + username: ${{ secrets.USERNAME }} + password: ${{ secrets.PASSWORD }} + port: ${{ secrets.PORT }} + source: "app-product.yml" + target: "/home/bmy/" + - name: 登录前端集群,拉镜像 uses: appleboy/ssh-action@v1 with: - # 192.168.139.19,192.168.139.120,192.168.139.242 + # 统一登录三台前端集群的linux,统一拉取刚推到仓库的最新镜像 + # 解决 Swarm 无法控制 工作机拉取镜像的问题! host: ${{ vars.SSH_HOST_LIST }} sync: true username: ${{ secrets.USERNAME }} password: ${{ secrets.PASSWORD }} port: ${{ secrets.PORT }} script: | - docker pull registry.bmycode.help/app-product:${{ github.sha }} \ No newline at end of file + # 拉取刚打包的最新镜像 + docker pull registry.bmycode.help/app-product:${{ github.sha }} + # 进入部署目录 + cd /home/bmy/ + # 部署到 Swarm 集群 + docker stack deploy -c app-product.yml app-product diff --git a/app-product.yml b/app-product.yml new file mode 100644 index 0000000..97e0705 --- /dev/null +++ b/app-product.yml @@ -0,0 +1,39 @@ +version: "3.8" # Docker Compose 文件版本,3.8 支持 Swarm 模式的所有功能 + +services: + app-product: + image: registry.bmycode.help/app-product:{{IMAGE_TAG}} + ports: + - target: 80 # 容器内部端口 + published: 1301 # 宿主机对外暴露端口 + protocol: tcp # 协议类型 + mode: ingress # 模式:使用路由网格 + deploy: + replicas: 3 # 副本数量,在集群中运行 3 个容器实例 + placement: + max_replicas_per_node: 1 # 每个 Swarm 节点最多运行 1 个副本,确保高可用性 + restart_policy: + condition: any # 重启条件:任何情况下容器退出都重启 + delay: 5s # 重启延迟 5 秒 + max_attempts: 3 # 最大重启尝试次数 + update_config: # 滚动更新配置 + parallelism: 1 # 并行更新数量:一次只更新 1 个容器 + delay: 10s # 更新间隔:每个容器更新后等待 10 秒再更新下一个 + failure_action: rollback # 更新失败时自动回滚到上一版本 + order: start-first # 更新顺序:先启动新容器,确认健康后再停止旧容器 + rollback_config: # 回滚配置 + parallelism: 1 # 回滚时并行数量 + delay: 5s # 回滚延迟 + resources: # 资源限制 + limits: # 资源上限 + cpus: "0.50" # 最多使用 0.5 个 CPU 核心 + memory: "256M" # 最多使用 256MB 内存 + reservations: # 资源预留 + cpus: "0.25" # 预留 0.25 个 CPU 核心 + memory: "128M" # 预留 128MB 内存 + networks: + - frontend # 连接到 frontend 网络 + +networks: + frontend: # 定义 frontend 网络 + driver: overlay # 使用 overlay 网络驱动,支持跨主机通信 \ No newline at end of file