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

发布于:2025-07-20 ⋅ 阅读:(17) ⋅ 点赞:(0)

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_dir

cat > "$build_dir/docker-compose.yml" <<EOF
version: "3.8"
services:
  ${imageName}:
    image: your-registry.com/group/${imageName}:${tag}
    ports:
      - ${port}:80
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
    volumes:
      - ./appsettings.Production.json:/app/appsettings.json
EOF

第二种

#!/bin/bash

#创建编译所需要的文件夹
build_dir="build"

if [ ! -d "$build_dir" ]; then
     mkdir $build_dir
fi


dockerFileName="$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.server

docker login --username=test@qq.com --password=123456 registry.cn-hangzhou.aliyuncs.com

docker compose -f  docker-compose.yml  down
mv docker-compose-n.yml docker-compose.yml
docker compose -f  docker-compose.yml  up  -d

exit

在这里插入图片描述


四、流程图解

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 .
    

附录


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


图片区

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

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

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

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

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


网站公告

今日签到

点亮在社区的每一天
去签到