mi-assessment/docs/CI-CD部署文档.md
zpc 2b10624c21
All checks were successful
continuous-integration/drone/push Build is passing
chore(ci): 迁移CI/CD到内网Harbor
- Dockerfile基础镜像切换到内网Harbor (192.168.195.25:19900)
- .drone.yml registry从外网域名改为内网Harbor
- Admin Dockerfile增加前端构建阶段(多阶段构建)
- 新增基础镜像推送脚本 (push-base-images.ps1/sh)
- 更新CI-CD部署文档
2026-03-24 15:10:19 +08:00

4.3 KiB
Raw Blame History

CI/CD 部署文档

本文档描述 MiAssessment 学业邑规划项目的 CI/CD 流水线配置,基于 Drone CI + Docker + Harbor 私有镜像仓库(内网)。

一、整体架构

代码推送 (master) → Drone CI 触发 → 构建 Docker 镜像 → 推送内网 Harbor → SSH 部署到服务器
组件 说明
CI 平台 Drone CI (192.168.195.25:13080)
镜像仓库 Harbor (192.168.195.25:19900HTTP
部署方式 Docker Compose
部署服务器 192.168.195.15
触发条件 master 分支 push 事件

二、构建的镜像

镜像 说明 Dockerfile 构建上下文
mi-assessment/api 小程序 API.NET 10 server/MiAssessment/src/MiAssessment.Api/Dockerfile server/MiAssessment
mi-assessment/admin 后台管理 API + 前端(.NET 10内含 admin-web 构建产物) server/MiAssessment/src/MiAssessment.Admin/Dockerfile server/MiAssessment

每个镜像打两个标签:latest 和 commit SHA 前 8 位(用于回滚)。

三、流水线步骤

.drone.yml 定义了 3 个步骤:

  1. build-api — 构建小程序 API 镜像
  2. build-admin — 构建后台管理 API 镜像
  3. deploy — SSH 部署(等待前两步完成)

两个构建步骤默认并行执行deploy 步骤通过 depends_on 等待全部完成后执行。

四、基础镜像(内网 Harbor

所有 Dockerfile 的基础镜像已切换到内网 Harbor避免依赖外网

基础镜像 内网地址 用途
dotnet/aspnet:10.0-preview 192.168.195.25:19900/library/dotnet/aspnet:10.0-preview .NET 运行时
dotnet/sdk:10.0-preview 192.168.195.25:19900/library/dotnet/sdk:10.0-preview .NET 构建
node:20-alpine 192.168.195.25:19900/library/node:20-alpine Admin 前端构建

一键推送基础镜像

在能访问外网的机器上执行脚本,将基础镜像推送到内网 Harbor

bash scripts/push-base-images.sh

如需手动推送单个镜像:

docker pull mcr.microsoft.com/dotnet/aspnet:10.0-preview
docker tag mcr.microsoft.com/dotnet/aspnet:10.0-preview 192.168.195.25:19900/library/dotnet/aspnet:10.0-preview
docker push 192.168.195.25:19900/library/dotnet/aspnet:10.0-preview

五、前置条件

5.1 Drone CI Secrets

在 Drone 仓库设置 → Secrets 中配置:

Secret 名称 说明
harbor_username Harbor 仓库用户名
harbor_password Harbor 仓库密码
ssh_username 部署服务器 SSH 用户名
ssh_password 部署服务器 SSH 密码

5.2 Harbor 镜像仓库

  1. 在 Harbor 中创建项目 mi-assessmentlibrary
  2. library 为公开项目存放基础镜像pull 不需要登录)
  3. mi-assessment 存放业务镜像,推送需要认证
  4. 当前使用 HTTPinsecure: true

5.3 部署服务器192.168.195.15

  1. 安装 Docker 和 Docker Compose
  2. 配置 Docker 信任 HarborHTTP
# /etc/docker/daemon.json
{
  "insecure-registries": ["192.168.195.25:19900"]
}

# 重启 Docker
systemctl restart docker
  1. 登录 Harbor
docker login 192.168.195.25:19900
  1. 部署目录:/disk/docker-compose/mi-assessment

六、常见问题

Q: 构建时拉取基础镜像失败?

基础镜像需要提前推送到内网 Harbor。运行 bash scripts/push-base-images.sh 一键推送。Drone CI 的 Docker daemon 也需要配置 insecure-registries(在 .drone.yml 中通过 insecure: true 处理推送,但 Dockerfile 中的 FROM 拉取需要 runner 层面配置)。

Q: Harbor 认证失败unauthorized

检查 Drone Secrets 中的 harbor_username / harbor_password 是否正确且未过期。

Q: 部署后服务没更新?

  1. 检查 docker compose pull 是否拉到了新镜像
  2. 确认服务器 Docker 已配置 insecure-registries
  3. 检查容器状态:docker compose ps / docker compose logs

Q: 如何回滚?

使用 commit SHA 标签:

# 在服务器上修改 docker-compose.yml 中的镜像标签
# 例如将 :latest 改为 :a1b2c3d4
docker compose up -d

Q: 如何手动触发构建?

在 Drone 界面找到对应仓库,点击 "New Build",选择分支即可。