打开网易新闻 查看精彩图片

去年有个数据挺有意思:Azure DevOps的CI/CD流水线执行次数在2023年突破了每月50亿次。但比这数字更值得玩味的是,大量.NET团队仍在用"本地编译→手动上传→SSH进服务器重启"的三部曲。这就像买了全自动洗衣机,坚持手搓领口。

云原生(Cloud-Native)不是把应用搬到云上,而是把"发布恐惧"从团队DNA里抠出去。

本文基于微软官方技术文档,拆解一条完整的企业级.NET交付流水线。不聊概念,直接看一个ASP.NET Core应用如何从代码提交到跑在Azure Kubernetes服务(AKS)上。

流水线骨架:YAML文件里的"交通规则"

流水线骨架:YAML文件里的"交通规则"

Azure DevOps的核心是一份azure-pipelines.yml。它像机场塔台的调度指令,告诉系统:代码来了先干嘛、测试挂了就停、镜像打好了往哪推。

一条基础流水线至少三段:编译→打包→部署。编译阶段用dotnet build和dotnet test,把单元测试通过率卡在门禁位置。测试挂了?整个流水线变红,没人能合并代码。

打包阶段进Docker。多阶段构建(Multi-stage Build)是关键技巧——先用SDK镜像把项目编译成DLL,再把这些DLL塞进精简的Runtime镜像。最终镜像体积能从500MB压到80MB,启动速度快了,AKS节点上能塞更多Pod。

部署阶段用Azure CLI或Kubernetes清单文件。Azure DevOps的"环境(Environment)"功能给每个阶段上锁:开发环境自动过,生产环境要人工点一下。这个"点一下"不是形式主义,是给回滚留的刹车片。

打开网易新闻 查看精彩图片

容器化:给.NET应用穿"宇航服"

容器化:给.NET应用穿"宇航服"

Dockerfile怎么写,直接决定你在AKS上的生存质量。微软官方镜像分两类:完整版带SDK,适合编译;精简版只带Runtime,适合运行。

一个典型陷阱是混淆这两类。有人图省事,从头到尾用SDK镜像,结果生产环境带着编译器到处跑,攻击面大了三倍。正确的姿势是分段:第一阶段用mcr.microsoft.com/dotnet/sdk:8.0执行dotnet publish,第二阶段用mcr.microsoft.com/dotnet/aspnet:8.0把输出文件拷进去。

镜像体积每减少100MB,AKS集群的节点成本大概能降5%-8%。这个数字来自微软Azure容器团队的内部测算,没写在公开文档里,但你在账单上能算出来。

镜像打好后推进Azure Container Registry(ACR)。ACR有个"任务(Tasks)"功能,能在云端执行docker build,不用本地跑。这对CI/CD是刚需——你的代理服务器(Agent)可能今天Windows明天Ubuntu,但ACR永远是一样的构建环境。

AKS部署:从"能跑"到"敢跑"

AKS部署:从"能跑"到"敢跑"

Kubernetes的YAML写起来像考古。Deployment、Service、Ingress、ConfigMap,四个文件起步。Azure DevOps的解决办法是"清单文件+变量替换":把环境相关的配置(数据库连接串、API密钥)抽成变量,流水线运行时注入。

这引出一个企业级刚需:基础设施即代码(Infrastructure as Code)。用Azure Resource Manager(ARM)模板或Terraform描述AKS集群,和应用程序代码进同一个Git仓库。集群配置改了?走PR流程,Code Review过了再生效。

打开网易新闻 查看精彩图片

安全扫描必须嵌进流水线。ACR自带Trivy漏洞扫描,镜像推上去自动扫。高危CVE出现?流水线变红,镜像标记为不可用。这比"上线后等安全团队发邮件"提前了两周。

可观测性(Observability)是最后一道保险。AKS集成Azure Monitor,容器日志、指标、分布式追踪一站式收齐。.NET应用只要引几行OpenTelemetry包,就能把请求链路画成火焰图。生产环境出问题,5分钟定位到具体Pod,而不是"好像有点慢"。

一个真实的时间对比

一个真实的时间对比

微软文档里没写具体数字,但给出了一个场景参照:传统手动部署一个.NET微服务,从代码冻结到上线平均需要3-5天。完整CI/CD流水线把这个周期压到小时级,紧急热修复能到分钟级。

更隐蔽的收益是"心理安全"。开发者敢频繁提交了,因为知道自动化测试会兜底。运维敢睡觉了,因为知道滚动更新失败会自动回滚。这种"敢"的状态,没法量化,但决定了团队能不能真的敏捷。

Azure DevOps的免费层对5人以下团队够用,企业版按用户数收费。但真正的成本不在许可证,在"把旧流程搬上来"的迁移工作量。一个中等规模的.NET单体应用,拆成3-4个容器化微服务,通常需要2-4周的流水线打磨。

这条流水线跑通之后,你的Git提交记录和AKS的Pod重启记录会形成一种奇妙的同步。代码合并,镜像生成,旧Pod优雅退出,新Pod接过流量——全程无人值守,像地铁换乘一样自然。

你们团队现在从代码提交到生产上线,需要经过多少个人工审批节点?