abcred.ai 的 Drone 配置示例
本页基于 /mnt/d/gitrepos-jqkai/abcred.ai/.drone.yml 拆解一条真实的 Drone 流水线,目的是帮助读者理解多前端 + ASP.NET Core 后端项目如何组织构建、汇总产物和部署。它是示例映射,不是当前文档仓库自己的 CI 配置。
这份示例适合看什么
type: exec的 Drone runner 如何承接 Docker、Kubernetes 和本机共享缓存。- 多个前端应用如何并行构建,再统一同步到后端发布目录。
dotnet publish、镜像打包和kubectl set image如何串成一条交付链。- 哪些细节可以复用,哪些必须按项目环境替换。
流水线总览
- pipeline 类型:
exec - pipeline 名称:
build-pipeline - runner 节点:
cn-build-02 - 平台:
linux / amd64 - 触发条件:
push到main或v2
这条流水线先准备 Docker 和 Kubernetes 运行环境,再并行构建多个前端应用与后端发布目录,随后把前端产物同步到后端发布目录,最后构建并推送镜像,再执行 Kubernetes 滚动更新。
步骤拆解
docker-config
- 创建
~/.docker并复制已有 Docker 配置。 - 复制现成的
~/.kube配置。 - 登录私有镜像仓库
hub.feinian.net。 - 通过
kubectl get nodes预检查 Kubernetes 连通性。
这一层本质上是 runner 环境预热,后面的前端构建和部署步骤都依赖它。
前端构建步骤
build portal assetsbuild chatwebbuild dashboardwebbuild adminwebbuild statuswebbuild toolsweb
这些步骤都依赖 docker-config,并统一通过 hub.feinian.net/build/node:24-alpine 运行 Node 构建容器。
它们把当前仓库挂载到 /workdir,把共享 pnpm store 挂载到 /pnpm_store,再在各自应用目录下执行 pnpm install、测试、类型检查和构建。
这里有两个值得复用的点:
- Node 构建镜像版本统一,减少不同前端之间的环境漂移。
pnpm store使用共享目录/data/build_share/pnpm_store,避免每次重复下载依赖。
publish backend
- 依赖
build portal assets。 - 在
hub.feinian.net/dotnet/sdk:10.0容器中执行dotnet publish apps/webapi/Jqkai.WebApi.Host.csproj -c Release。 - 输出目录是
apps/webapi/Infrastructure/Hosting/Docker/publish。 - 用时间戳生成
IMAGE_VERSION,写入publish/version.txt,供后续步骤复用。
这一层把“后端发布”和“镜像构建”拆开了,便于单独排查 dotnet publish 问题。
sync client apps
- 同时依赖
publish backend和所有前端构建步骤。 - 通过
scripts/frontend/sync-all-apps-to-publish.sh把各前端产物同步到后端发布目录。
这是整个示例里最关键的汇总步骤。它把多前端项目与 ASP.NET Core 宿主真正接到一起,避免在 Drone YAML 里重复堆叠大量文件复制命令。
package and deploy
- 依赖
sync client apps。 - 从
publish/version.txt读取镜像版本。 - 基于最终发布目录构建镜像
hub.feinian.net/jqk/jqkai_webapi:$IMAGE_VERSION。 - 推送镜像到私有仓库。
- 执行
kubectl -n feinian set image deployment/jqkapi app=...完成滚动更新。
这里说明发布目录已经是最终可打包目录,镜像步骤不再负责重新编译源码。
依赖链说明
docker-config是大多数步骤的共同前置。- 多个前端应用在
docker-config完成后并行构建。 publish backend没有等待所有前端完成,只先依赖build portal assets,说明该项目把 portal 静态资源视为后端发布前置条件之一。sync client apps才是完整汇总点,它等待后端发布和所有前端构建全部完成。package and deploy只消费汇总好的最终发布目录。
这种依赖组织的优点是并行度高,同时保留一个清晰的产物汇总边界。
可以复用的做法
- 用单独步骤准备 Docker、Kubernetes 和私有仓库认证。
- 用共享目录缓存
pnpm、NuGet 和 .NET SDK。 - 将前端构建拆成独立步骤并行执行。
- 用脚本统一同步前端产物到后端发布目录。
- 在发布目录里写入版本号文件,供后续镜像和部署步骤读取。
不应直接照搬的部分
runner_name: cn-build-02- 私有镜像仓库
hub.feinian.net - 共享缓存路径
/data/build_share/* - Kubernetes namespace
feinian - deployment 名称
jqkapi - 镜像名
hub.feinian.net/jqk/jqkai_webapi
这些都属于 abcred.ai 的项目环境细节,只能说明配置思路,不能当成 AgileLabs 项目的默认值。