Jenkins自动化部署.NET应用实战:Docker+私有仓库+SSH远程发布
Jenkins自动化部署.NET应用实战:Docker+私有仓库+SSH远程发布
一、场景概述
本文介绍通过Jenkins实现.NET应用的全自动化部署流程,包含以下阶段:
✅ 代码拉取 → ✅ Docker镜像构建 → ✅ 私有仓库推送 → ✅ SSH远程服务器部署
适用场景:企业内部CI/CD流水线、微服务容器化部署、多环境发布
二、环境准备
工具 | 版本要求 | 备注 |
---|---|---|
Jenkins | 2.346.3+ | 需安装SSH插件/Pipeline插件 |
Docker | 20.10.17+ | 支持Buildx |
.NET SDK | 6.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
四、流程图解
五、常见问题排查
-
镜像推送失败
- 检查
docker login
凭证权限 - 确认仓库路径是否存在(需提前创建)
- 检查
-
SSH连接超时
# 测试连接: ssh -v -i /path/to/key user@server "docker info"
-
容器启动报错
# 查看日志: docker logs -f test.api
六、优化建议
-
安全增强
- 使用Vault管理密钥
- 限制SSH用户的sudo权限
-
性能提升
# 并行构建示例: docker buildx build --platform linux/amd64,linux/arm64 --push .
附录:
- Jenkins官方文档
- Docker多阶段构建指南
版权声明:本文配置模板可自由使用,请注明技术来源。实际部署时需替换占位符为真实值。
图片区
文中所有图片均为实际截图:
- Jenkins参数配置界面
- Git仓库设置页面
- 构建成功后的控制台输出
如需更详细的配图说明,后续我可补充各环节的动画演示GIF。
补充:SSH 远程链接设置
以上为本文全部内容,这些设置好基本可以完成简单的jenkins自动化部署,有什么问题可以在评论区留言!
写在最后:
恭喜!您已解锁「Jenkins流水线魔法师」初级成就 🎉
如果这篇指南帮你:
✅ 今天下班早了1小时 → 不妨点个赞
✅ 明天不用凌晨修部署 → 考虑打个赏
✅ 下个月涨薪了 → 记得回来还愿