test
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
编码猿
2025-09-09 09:30:16 +08:00
parent a16a626e8f
commit 6719600e64

View File

@@ -3,6 +3,49 @@ type: docker
name: nodejs-host-network-pipeline name: nodejs-host-network-pipeline
steps: 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" != "<none>" ]; 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 - name: install-dependencies
image: node:18-bullseye image: node:18-bullseye
@@ -39,7 +82,7 @@ steps:
docker run -d \ docker run -d \
--restart always \ --restart always \
--network host \ --network host \
--name node-app-${DRONE_COMMIT_SHA:0:8} \ --name node-app-prod \
node-app:${DRONE_COMMIT_SHA:0:8} node-app:${DRONE_COMMIT_SHA:0:8}
when: when:
branch: branch: