Files
IPV6/.drone.yml
编码猿 d79a0389d2
Some checks failed
continuous-integration/drone/push Build is failing
test3
2025-09-09 09:36:22 +08:00

111 lines
3.2 KiB
YAML
Raw 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: 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 "调试信息: APP_NAME=${APP_NAME}, CONTAINER_NAME=${CONTAINER_NAME}, CURRENT_TAG=${CURRENT_TAG}"
echo "开始清理残留资源..."
# 1. 停止并删除正在运行的旧容器
# 增强检查确保CONTAINER_NAME有值
if [ -n "${CONTAINER_NAME}" ] && [ "$(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
image: node:18-bullseye
commands:
# 安装iproute2工具
- apt-get update && apt-get install -y iproute2
# 验证ip命令是否可用
- ip -V
# 安装项目依赖
- npm install
volumes:
- name: node_modules
path: /app/node_modules
# 第三步构建Docker镜像
- name: build-image
image: docker:20.10
volumes:
- name: docker-socket
path: /var/run/docker.sock
- name: node_modules
path: /app/node_modules
commands:
- docker build -t node-app:${DRONE_COMMIT_SHA:0:8} -f Dockerfile .
# 第四步使用host网络运行应用
- name: run-with-host-network
image: docker:20.10
volumes:
- name: docker-socket
path: /var/run/docker.sock
commands:
- |
docker run -d \
--restart always \
--network host \
--name node-app-prod \
node-app:${DRONE_COMMIT_SHA:0:8}
when:
branch:
- main
# 定义卷用于共享依赖和Docker socket
volumes:
- name: node_modules
temp: {}
- name: docker-socket
host:
path: /var/run/docker.sock
# 构建触发条件
trigger:
branch:
- main
- develop
event:
- push
- pull_request