From 6f5bb867070bdc5ca5d9066634572888c6d23c2d Mon Sep 17 00:00:00 2001 From: gxl Date: Tue, 2 Jun 2026 17:52:42 +0800 Subject: [PATCH] 10 --- .woodpecker.yaml | 18 ++++++++++++++++++ deploy.sh | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 deploy.sh diff --git a/.woodpecker.yaml b/.woodpecker.yaml index 1cd45da..ce4f6e1 100644 --- a/.woodpecker.yaml +++ b/.woodpecker.yaml @@ -29,6 +29,24 @@ steps: mirror: https://docker.m.daocloud.io # 很多时候 plugins/docker 内部默认会处理 context,不需要你手动挂载 docker.sock # 但需要确保服务器配置了 WOODPECKER_PLUGINS_PRIVILEGED=plugins/docker + when: + event: push + branch: master + + - name: 目标机器部署 + image: appleboy/drone-ssh:latest + settings: + host: + from_secret: 136_ssh_host + username: + from_secret: 136_ssh_user + key: + from_secret: 136_ssh_key + port: 22 + command_timeout: 10m + # 👇 核心黑魔法:利用 SSH 远程执行本地的脚本文件 + script: + - bash -s < ./deploy.sh when: event: push branch: master \ No newline at end of file diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..47fed16 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# deploy.sh +set -e + +REGISTRY="registry.cn-zhangjiakou.aliyuncs.com" +IMAGE_NAME="${REGISTRY}/abhors/demo:latest" +CONTAINER_NAME="demo-app" + +echo "==========================================" +echo " 🚀 开始远程部署: $(date '+%Y-%m-%d %H:%M:%S')" +echo "==========================================" + +# 1. 拉取最新镜像 (前提:你已经在服务器上手动执行过一次 docker login 保持登录状态) +echo "👉 正在拉取最新镜像..." +docker pull $IMAGE_NAME + +# 2. 清理旧容器 +echo "👉 正在清理旧容器..." +docker stop $CONTAINER_NAME 2>/dev/null || true +docker rm $CONTAINER_NAME 2>/dev/null || true + +# 3. 启动新容器(带内存限制) +echo "👉 正在启动新容器..." +docker run -d \ + --name $CONTAINER_NAME \ + -p 8080:8080 \ + --memory="1.2g" \ + --restart always \ + $IMAGE_NAME + +# 4. 清理残留的旧镜像 +echo "👉 清理历史构建残留..." +docker image prune -f + +echo "==========================================" +echo " 🎉 部署成功!" +echo "==========================================" \ No newline at end of file