Files
IPV6/.drone.yml
编码猿 5a15f7752a
All checks were successful
continuous-integration/drone/push Build is passing
ddd
2025-09-09 10:18:51 +08:00

102 lines
2.9 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:
- |
echo "开始清理残留资源..."
# 1. 停止并删除正在运行的旧容器
if [ "$(docker ps -q -f name=node-app-prod)" ]; then
echo "停止并删除运行中的容器: node-app-prod"
docker stop node-app-prod || true
docker rm node-app-prod || true
else
echo "没有运行中的 node-app-prod 容器"
fi
# 2. 删除同前缀的旧镜像(排除当前构建标签)
echo "清理旧镜像..."
# 只处理有ID和标签的镜像跳过空值
docker images --filter "reference=node-app:*" --format "{{.ID}} {{.Tag}}" | \
while read -r image_id tag; do
# 检查image_id和tag是否有效
if [ -n "$image_id" ] && [ -n "$tag" ] && [ "$tag" != "${DRONE_COMMIT_SHA:0:8}" ] && [ "$tag" != "<none>" ]; then
echo "删除旧镜像: node-app:${tag} (ID: ${image_id})"
docker rmi -f "${image_id}" || true
else
echo "跳过无效镜像: ID=${image_id}, Tag=${tag}"
fi
done
# 3. 清理悬空镜像构建失败产生的none标签镜像
echo "清理悬空镜像..."
dangling_images=$(docker images -f "dangling=true" -q)
if [ -n "$dangling_images" ]; then
# 确保只传递非空ID
echo "$dangling_images" | xargs -I {} docker rmi -f {} || true
else
echo "没有悬空镜像需要清理"
fi
# 第一步:准备环境并安装依赖
- name: install-dependencies
image: node:18-bullseye
commands:
- apt-get update && apt-get install -y iproute2
- 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
volumes:
- name: node_modules
temp: {}
- name: docker-socket
host:
path: /var/run/docker.sock
trigger:
branch:
- main
- develop
event:
- push
- pull_request