3分钟上手!Jenkins + .NET Core 打造零故障持续集成流水线
你还在手动编译部署.NET Core应用?频繁遇到"本地能跑线上崩"的诡异问题?本文将带你用Jenkins构建全自动CI流水线,3步解决版本不一致、测试遗漏、部署繁琐三大痛点。读完你将获得:
✅ 跨平台编译的Docker镜像配置
✅ 自动化测试与质量门禁实现
✅ 与.NET SDK无缝集成的构建脚本
为什么选择Jenkins构建.NET Core流水线
.NET Core应用的持续集成面临三大挑战:多版本SDK管理、跨平台兼容性验证、测试覆盖率把控。Jenkins通过以下特性完美解决:
- 动态环境隔离:通过Docker容器实现不同.NET版本如3.1/6.0/8.0的并行构建
- 丰富插件生态:MSBuild插件支持.csproj项目文件解析
- 深度集成能力:可直接调用dotnet CLI工具链完成restore/build/test/publish全流程
环境准备:3个关键组件配置
1. Jenkins服务器搭建
推荐使用Docker快速部署Jenkins:
docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
--name jenkins jenkins/jenkins:lts
2. .NET SDK环境配置
在Jenkins全局工具配置中添加多个.NET版本:
3. 必要插件安装
在Jenkins插件管理页面搜索安装:
- MSBuild (用于解析项目文件)
- Docker Pipeline (容器化构建支持)
- Cobertura (测试覆盖率报告)
实战:构建ASP.NET Core Web应用流水线
1. 创建基础流水线项目
新建"自由风格项目",在源码管理中配置Git仓库:
https://gitcode.com/GitHub_Trending/core82/core
指定分支过滤器*/main,并勾选"轮询SCM",设置 polling schedule为H/5 * * * *(每5分钟检查一次代码更新)
2. 编写多阶段构建脚本
在"构建"环节添加"执行shell"步骤,输入以下脚本:
# 使用官方SDK镜像构建
docker run --rm -v $PWD:/app mcr.microsoft.com/dotnet/sdk:8.0 \
sh -c "cd /app/src && \
dotnet restore --source https://nuget.cdn.azure.cn/v3/index.json && \
dotnet build -c Release && \
dotnet test --collect:\"XPlat Code Coverage\" && \
dotnet publish -o /app/publish"
# 构建运行时镜像
docker build -t myapp:${BUILD_NUMBER} -f Dockerfile .
国内用户建议配置NuGet国内镜像加速依赖下载
3. 配置质量门禁与报告
- 添加"发布Cobertura报告"步骤,指定测试结果路径:
**/TestResults/**/coverage.cobertura.xml - 设置构建后操作:当测试覆盖率<80%时标记构建失败
- 归档构建产物:将
publish/目录和Docker镜像作为构建 artifact 存储
高级优化:跨平台构建与版本管理
多架构支持配置
修改Dockerfile支持x64/arm64多平台构建:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG TARGETARCH
WORKDIR /src
COPY ["WebApp.csproj", "."]
RUN dotnet restore -a ${TARGETARCH}
COPY . .
WORKDIR "/src/."
RUN dotnet build "WebApp.csproj" -c Release -o /app/build -a ${TARGETARCH}
FROM build AS publish
RUN dotnet publish "WebApp.csproj" -c Release -o /app/publish -a ${TARGETARCH}
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApp.dll"]
与.NET版本生命周期同步
定期检查.NET支持策略,在Jenkins中通过"配置矩阵"实现:
- 行维度:.NET版本(6.0/7.0/8.0)
- 列维度:操作系统(Ubuntu 22.04/Windows Server 2022)
流水线即代码:Jenkinsfile完整示例
将以下内容保存为项目根目录的Jenkinsfile,实现流水线配置版本化:
pipeline {
agent any
tools {
dotnet 'DotNet8.0' // 对应Jenkins全局配置的SDK名称
}
stages {
stage('Build') {
steps {
script {
dotnetRestore arguments: '--source https://nuget.cdn.azure.cn/v3/index.json'
dotnetBuild configuration: 'Release'
}
}
}
stage('Test') {
steps {
dotnetTest arguments: '--collect:\"XPlat Code Coverage\"'
}
post {
always {
cobertura coberturaReportFile: '**/coverage.cobertura.xml'
}
}
}
stage('Publish') {
steps {
dockerImage = docker.build("myapp:${env.BUILD_NUMBER}")
}
}
}
}
常见问题解决方案
| 问题现象 | 排查方向 | 参考文档 |
|---|---|---|
| 构建时SDK版本不匹配 | 检查global.json配置 | .NET版本选择 |
| 测试报文件访问权限错误 | Jenkins用户ID与容器映射问题 | Docker权限配置 |
| 国内NuGet下载缓慢 | 配置镜像源 | Linux包管理 |
总结与进阶路线
本文构建的基础流水线已能满足中小型团队需求。下一步可扩展:
- 集成SonarQube实现代码质量静态分析
- 配置部署流水线实现CI/CD一体化
- 使用Kubernetes插件实现动态Slave扩容
点赞收藏本文,关注获取下期《.NET Core微服务CI/CD全流程》。你在构建流水线时遇到过哪些奇葩问题?欢迎在评论区留言讨论。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



