3分钟上手!Jenkins + .NET Core 打造零故障持续集成流水线

3分钟上手!Jenkins + .NET Core 打造零故障持续集成流水线

【免费下载链接】core dotnet/core: 是 .NET Core 的官方仓库,包括 .NET Core 运行时、库和工具。适合对 .NET Core、跨平台开发和想要使用 .NET Core 进行跨平台开发的开发者。 【免费下载链接】core 项目地址: https://gitcode.com/GitHub_Trending/core82/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全流程

mermaid

环境准备: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版本:

  • 安装方式:选择"自动安装"并指定官方下载源
  • 路径配置:确保dotnet --version能返回8.0.100等目标版本

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. 配置质量门禁与报告

  1. 添加"发布Cobertura报告"步骤,指定测试结果路径:
    **/TestResults/**/coverage.cobertura.xml
    
  2. 设置构建后操作:当测试覆盖率<80%时标记构建失败
  3. 归档构建产物:将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包管理

总结与进阶路线

本文构建的基础流水线已能满足中小型团队需求。下一步可扩展:

点赞收藏本文,关注获取下期《.NET Core微服务CI/CD全流程》。你在构建流水线时遇到过哪些奇葩问题?欢迎在评论区留言讨论。

【免费下载链接】core dotnet/core: 是 .NET Core 的官方仓库,包括 .NET Core 运行时、库和工具。适合对 .NET Core、跨平台开发和想要使用 .NET Core 进行跨平台开发的开发者。 【免费下载链接】core 项目地址: https://gitcode.com/GitHub_Trending/core82/core

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值