当前位置: 首页 > news >正文

Jenkins自动化部署.NET应用实战:Docker+私有仓库+SSH远程发布

Jenkins自动化部署.NET应用实战:Docker+私有仓库+SSH远程发布

一、场景概述

本文介绍通过Jenkins实现.NET应用的全自动化部署流程,包含以下阶段:
✅ 代码拉取 → ✅ Docker镜像构建 → ✅ 私有仓库推送 → ✅ SSH远程服务器部署

适用场景:企业内部CI/CD流水线、微服务容器化部署、多环境发布


二、环境准备

工具版本要求备注
Jenkins2.346.3+需安装SSH插件/Pipeline插件
Docker20.10.17+支持Buildx
.NET SDK6.0+与项目版本匹配
目标服务器Ubuntu 20.04+需开放SSH端口和Docker权限

三、Jenkins配置详解

1. 创建Item与基础设置

路径新建Item → 输入名称 → 选择Freestyle project
在这里插入图片描述


2. 参数化构建配置

// 日期参数用于镜像标签
dateParameter(name: 'tag',dateFormat: 'yyyyMMddHHmm',defaultValue: '${BUILD_TIMESTAMP,format="yyyyMMddHHmm"}',description: '镜像版本时间戳'
)// 镜像名称参数
stringParameter(name: 'imageName',defaultValue: 'test.api',description: 'Docker镜像名称'
)// 容器端口参数
stringParameter(name: 'port',defaultValue: '9001',description: '服务暴露端口'
)

在这里插入图片描述
在这里插入图片描述


3. 源码管理(Git)

Git配置:- Repository URL: http://your-git-server.com/group/test.api.git- Credentials: [选择已绑定的Git账号凭据]- Branch Specifier: */main

在这里插入图片描述


4. 构建步骤分栏配置

▶ 执行Shell #1 - 生成Docker编排文件
#!/bin/bash
build_dir="build_${BUILD_NUMBER}"
mkdir -p $build_dircat > "$build_dir/docker-compose.yml" <<EOF
version: "3.8"
services:${imageName}:image: your-registry.com/group/${imageName}:${tag}ports:- ${port}:80environment:- ASPNETCORE_ENVIRONMENT=Productionvolumes:- ./appsettings.Production.json:/app/appsettings.json
EOF

第二种

#!/bin/bash#创建编译所需要的文件夹
build_dir="build"if [ ! -d "$build_dir" ]; thenmkdir $build_dir
fidockerFileName="$build_dir/Dockerfile"#创建自定义docker-compose.yml文件
dockerCompose="$build_dir/docker-compose-n.yml"
touch "$dockerCompose"
cat "$dockerCompose"echo 'version: "3.4"' >>$dockerCompose
echo 'services:' >>$dockerCompose
echo "  $imageName:" >>$dockerCompose
echo "    image: registry.cn-hangzhou.aliyuncs.com/mokk/$imageName:$tag" >>$dockerCompose
echo "    container_name: $imageName" >>$dockerCompose
echo '    ports:' >>$dockerCompose
echo "      - $port:80" >>$dockerCompose
echo '    restart: always'   >>$dockerCompose
echo '    environment:' >>$dockerCompose
echo '      - TZ=Asia/Shanghai' >>$dockerCompose
echo '      - ASPNETCORE_URLS=http://+:80;' >>$dockerCompose
echo '    volumes:'>>$dockerCompose
echo '      - ./data:/app/data'   >>$dockerCompose
echo '      - ./appsettings.json:/app/appsettings.json'   >>$dockerCompose

在这里插入图片描述

▶ 执行Shell #2 - 构建推送镜像
#!/bin/bash
# 使用多阶段构建加速
docker buildx build \-f "./src/Test.API/Dockerfile" \-t your-registry.com/group/${imageName}:${tag} \--push .# 清理本地缓存
docker system prune -f

第二种

docker build -f './src/Test.API/Dockerfile' -t $imageName:$tag .
docker login --username=test@qq.com--password=123456 registry.cn-hangzhou.aliyuncs.com
docker tag $imageName:$tag registry.cn-hangzhou.aliyuncs.com/mokk/$imageName:$tag
docker push registry.cn-hangzhou.aliyuncs.com/mokk/$imageName:$tag

在这里插入图片描述

▶ SSH远程部署

传输配置

  • Source files: build_${BUILD_NUMBER}/*
  • Remove prefix: build_${BUILD_NUMBER}/
  • Remote directory: /opt/apps/${imageName}

远程命令

cd /opt/apps/${imageName}
docker compose down --timeout 60
docker compose up -d --remove-orphans
sleep 10
curl -s http://localhost:${port}/healthcheck || exit 1

第二种

cd /data/apps/mokk.dbs.identity.serverdocker login --username=test@qq.com --password=123456 registry.cn-hangzhou.aliyuncs.comdocker compose -f  docker-compose.yml  down
mv docker-compose-n.yml docker-compose.yml
docker compose -f  docker-compose.yml  up  -dexit

在这里插入图片描述


四、流程图解

Remote Server
Jenkins Server
SSH传输文件
停止旧容器
启动新容器
健康检查
拉取代码
触发构建
生成docker-compose.yml
构建Docker镜像
推送至私有仓库

五、常见问题排查

  1. 镜像推送失败

    • 检查docker login凭证权限
    • 确认仓库路径是否存在(需提前创建)
  2. SSH连接超时

    # 测试连接:
    ssh -v -i /path/to/key user@server "docker info"
    
  3. 容器启动报错

    # 查看日志:
    docker logs -f test.api
    

六、优化建议

  1. 安全增强

    • 使用Vault管理密钥
    • 限制SSH用户的sudo权限
  2. 性能提升

    # 并行构建示例:
    docker buildx build --platform linux/amd64,linux/arm64 --push .
    

附录

  • Jenkins官方文档
  • Docker多阶段构建指南

版权声明:本文配置模板可自由使用,请注明技术来源。实际部署时需替换占位符为真实值。


图片区

文中所有图片均为实际截图:

  1. Jenkins参数配置界面
  2. Git仓库设置页面
  3. 构建成功后的控制台输出

如需更详细的配图说明,后续我可补充各环节的动画演示GIF。

补充:SSH 远程链接设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上为本文全部内容,这些设置好基本可以完成简单的jenkins自动化部署,有什么问题可以在评论区留言!

写在最后:
恭喜!您已解锁「Jenkins流水线魔法师」初级成就 🎉
如果这篇指南帮你:
✅ 今天下班早了1小时 → 不妨点个赞
✅ 明天不用凌晨修部署 → 考虑打个赏
✅ 下个月涨薪了 → 记得回来还愿

http://www.xdnf.cn/news/1146997.html

相关文章:

  • PostgreSQL常用命令与工具指南
  • OpenCV 官翻6 - Computational Photography
  • uniapp中报错:ReferenceError: FormData is not defined
  • LVS 集群技术实践:NAT 与 DR 模式的配置与对比
  • MySQL基础教程
  • OllyDbg技巧学习
  • 车载诊断架构 --- 故障码DTC严重等级定义
  • 【Unity编辑器开发GUI.Window】
  • Netty集群方案详解与实战(Zookeeper + Redis + RabbitMQ)
  • 如何用Python并发下载?深入解析concurrent.futures 与期物机制
  • 【密码学】1. 引言
  • 目标框的位置以及大小的分布
  • 题解:CF1617C Paprika and Permutation
  • VMC850立式加工中心Y轴传动机械结构设计cad【7张】三维图+设计说明书
  • DTW算法解决时序问题的解析实践
  • JavaSE -- 数组详细讲解(数组介绍,Arrays常用方法,二维数组创建)
  • Spring中的设计模式
  • pom.xml文件中的${}变量从哪里传值
  • 基于Qwen2.5-3B-Instruct的LoRA微调与推理实战指南
  • js中的微任务和宏任务的理解
  • 读书笔记:《动手做AI Agent》
  • Android性能优化之UI渲染优化
  • LP-MSPM0G3507学习--05中断及管脚中断
  • CMake指令:常见内置命令行工具( CMake -E )
  • math.h函数
  • CCF编程能力等级认证GESP—C++3级—20250628
  • 20250718-3-Kubernetes 应用程序生命周期管理-Pod对象:存在意义_笔记
  • MyBatis-Flex代码生成
  • jvm分析篇---1、先认识下dump文件
  • b-up:Enzo_Mi:深度学习基础知识