
1) 【一句话结论】
使用Azure Pipelines构建包含构建、测试、发布三个阶段的CI/CD流水线,通过Docker容器化.NET Web应用,将构建的Docker镜像推送到Azure Container Registry(ACR),最终部署到Azure App Service,实现从代码提交到上线全流程自动化。
2) 【原理/概念讲解】
CI/CD流水线是自动化软件交付的流程,以.NET Web应用为例,核心阶段及工具如下:
dotnet build)并生成Docker镜像。编写Dockerfile指定基础镜像(如mcr.microsoft.com/dotnet/aspnet:7.0)、工作目录、复制文件、运行命令等,目的是将应用打包成容器,便于跨环境部署。类比:构建阶段像“把代码装进集装箱”,测试阶段像“检查集装箱里的货物是否完好”,发布阶段像“把集装箱运到仓库并上架”。
3) 【对比与适用场景】
| 对比项 | 单元测试 | 集成测试 |
|---|---|---|
| 定义 | 针对单个代码单元(方法/类) | 验证多个组件或模块的交互 |
| 特性 | 快速执行,依赖模拟/存根 | 模拟真实环境,执行较慢 |
| 使用场景 | 早期开发,快速反馈 | 后期验证,确保模块间协作 |
| 注意点 | 需要独立测试数据 | 需要模拟外部服务(如数据库) |
4) 【示例】
以YAML格式的Azure Pipelines为例:
trigger:
- main
prerequisites:
- group: 'Azure DevOps Service Connection'
stages:
- stage: 'Build'
jobs:
- job: 'Build'
pool:
vmImage: 'ubuntu-latest'
steps:
- script: dotnet restore
- script: dotnet build -c Release
- script: docker build -t myapp:$(Build.BuildId) .
- script: docker tag myapp:$(Build.BuildId) myacr.azurecr.io/myapp:$(Build.BuildId)
- task: AzureContainerRegistryLogin@1
inputs:
connectService: 'myacr'
- task: AzureContainerPublish@1
inputs:
connectService: 'myacr'
containerName: 'myapp:$(Build.BuildId)'
- stage: 'Test'
jobs:
- job: 'Test'
pool:
vmImage: 'ubuntu-latest'
steps:
- script: dotnet test /p:CollectCoverage=true
- task: PublishTestResults@2
inputs:
testResultsFile: '**/testresults/*.xml'
runLocation: 'task'
- stage: 'Deploy'
dependsOn: 'Build'
jobs:
- job: 'Deploy'
pool:
vmImage: 'ubuntu-latest'
steps:
- task: AzureWebAppDeployment@4
inputs:
azureWebAppType: 'webApp'
azureWebAppServiceConnection: 'mywebapp'
azureWebAppSourceFolder: '$(System.DefaultWorkingDirectory)'
azureWebAppPublishProfile: '$(System.DefaultWorkingDirectory)/publish.xml'
azureWebAppPackage: '$(Build.ArtifactStagingDirectory)/myapp:$(Build.BuildId).docker.tar'
(注:publish.xml示例,包含ACR连接和部署配置)
5) 【面试口播版答案】
“在Azure DevOps中构建.NET Web应用的CI/CD流水线,我会分三个阶段:首先构建阶段,用Dockerfile编译代码并生成Docker镜像;然后测试阶段,运行单元测试(如xUnit)和集成测试(如Web API测试),确保代码质量;最后发布阶段,将镜像推送到Azure Container Registry(ACR),再部署到Azure App Service。具体来说,构建阶段会编译.NET应用并构建Docker镜像,测试阶段执行自动化测试,失败则停止流水线,发布阶段通过ACR连接部署到App Service,实现从代码提交到上线的全自动化。”
6) 【追问清单】
7) 【常见坑/雷区】