2026-05-20 21:39:12 +08:00

92 lines
2.9 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

kind: pipeline
type: docker
name: ai-flow-backend-prod-deploy
steps:
# 步骤1: 将代码同步到远程服务器
- name: sync-code
image: appleboy/drone-scp
settings:
host:
from_secret: PROD_HOST
username:
from_secret: PROD_USER
key:
from_secret: PROD_SSH_KEY
port: 22
target: /data/ai_flow_backend-prod/source
source:
- .
rm_target: true
strip_components: 0
# 步骤2: SSH到远程服务器执行构建和单实例部署
- name: build-and-deploy
image: appleboy/drone-ssh
settings:
host:
from_secret: PROD_HOST
username:
from_secret: PROD_USER
key:
from_secret: PROD_SSH_KEY
port: 22
command_timeout: 20m
envs:
- DRONE_TAG
script:
- echo "===== 开始构建版本:${DRONE_TAG} ====="
- cd /data/ai_flow_backend-prod/source
# 删除旧镜像
- docker rmi ai-flow-backend-prod:latest || true
# 构建新镜像
- docker build -f Dockerfile-prod -t ai-flow-backend-prod:${DRONE_TAG} -t ai-flow-backend-prod:latest .
# ===== 清理旧单实例容器 =====
- |
if docker ps -a --format '{{.Names}}' | grep -q '^ai-flow-backend-prod$'; then
echo "检测到旧单实例容器 ai-flow-backend-prod先清理"
docker stop ai-flow-backend-prod || true
docker rm ai-flow-backend-prod || true
fi
# ===== 部署单实例 =====
- echo "===== 部署单实例 ai-flow-backend-prod ====="
# 启动新容器宿主机映射为8004容器内为8002
- |
docker run -d \
--name ai-flow-backend-prod \
--restart always \
-p 8004:8002 \
-v /data/ai_flow_backend-prod/uploads:/app/uploads \
-v /data/ai_flow_backend-prod/logs:/app/logs \
ai-flow-backend-prod:${DRONE_TAG}
# 等待容器启动
- |
HEALTH_OK=false
for i in $(seq 1 30); do
# 如果有健康检查接口,请替换为 curl例如curl -sf http://127.0.0.1:8002/health
# 这里先用 docker inspect 判断是否处于 running 状态
if [ "$(docker inspect -f '{{.State.Running}}' ai-flow-backend-prod)" = "true" ]; then
echo "ai-flow-backend-prod 启动成功"
HEALTH_OK=true
break
fi
echo "等待容器启动... ($i/30)"
sleep 2
done
if [ "$HEALTH_OK" != "true" ]; then
echo "ERROR: ai-flow-backend-prod 启动超时"
exit 1
fi
# ===== 清理无用的悬空镜像 =====
- docker image prune -f
- echo "===== 单实例部署完成ai-flow-backend-prod:${DRONE_TAG} ====="
trigger:
event:
- tag