From 6719600e644dee87cf39fe6323003f28a4a484e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BC=96=E7=A0=81=E7=8C=BF?= Date: Tue, 9 Sep 2025 09:30:16 +0800 Subject: [PATCH] test --- .drone.yml | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index ba267bb..1ab76aa 100644 --- a/.drone.yml +++ b/.drone.yml @@ -3,6 +3,49 @@ type: docker name: nodejs-host-network-pipeline steps: + # 步骤0:清理残留容器和镜像(优先执行) + - name: cleanup-resources + image: docker:20.10 + volumes: + - name: docker-socket + path: /var/run/docker.sock + commands: + - | + # 定义应用相关的名称标识 + APP_NAME="node-app" + CONTAINER_NAME="node-app-prod" + CURRENT_TAG="${DRONE_COMMIT_SHA:0:8}" + + echo "开始清理残留资源..." + + # 1. 停止并删除正在运行的旧容器 + if [ "$(docker ps -q -f name=${CONTAINER_NAME})" ]; then + echo "停止并删除运行中的容器: ${CONTAINER_NAME}" + docker stop ${CONTAINER_NAME} || true + docker rm ${CONTAINER_NAME} || true + else + echo "没有运行中的 ${CONTAINER_NAME} 容器" + fi + + # 2. 删除同前缀的旧镜像(排除当前构建标签) + echo "清理旧镜像..." + docker images --filter "reference=${APP_NAME}:*" --format "{{.ID}} {{.Tag}}" | \ + while read -r image_id tag; do + if [ "$tag" != "$CURRENT_TAG" ] && [ "$tag" != "" ]; then + echo "删除旧镜像: ${APP_NAME}:${tag} (ID: ${image_id})" + docker rmi -f ${image_id} || true + fi + done + + # 3. 清理悬空镜像(构建失败产生的none标签镜像) + echo "清理悬空镜像..." + dangling_images=$(docker images -f "dangling=true" -q) + if [ -n "$dangling_images" ]; then + docker rmi -f $dangling_images || true + else + echo "没有悬空镜像需要清理" + fi + # 第一步:准备环境并安装依赖 - name: install-dependencies image: node:18-bullseye @@ -39,7 +82,7 @@ steps: docker run -d \ --restart always \ --network host \ - --name node-app-${DRONE_COMMIT_SHA:0:8} \ + --name node-app-prod \ node-app:${DRONE_COMMIT_SHA:0:8} when: branch: