Jenkins+Docker+Harbor快速部署Spring Boot项目详解

news2025/5/25 8:55:20

Jenkins+Docker+Harbor快速部署Spring Boot项目详解

Jenkins、Docker和Harbor是现代DevOps流程中的核心工具,结合使用可以实现自动化构建、测试和部署。下面我将详细介绍如何搭建这个集成环境。

一、各工具的核心作用

  1. Jenkins

    • 自动化CI/CD工具,负责拉取代码、编译、测试、构建Docker镜像并部署
    • 提供可视化界面管理Pipeline
  2. Docker

    • 容器化平台,将应用及其依赖打包成独立容器
    • 确保环境一致性,提高部署效率
  3. Harbor

    • 企业级Docker镜像仓库,存储和管理Docker镜像
    • 支持权限控制、镜像复制、安全扫描等功能

二、环境准备

  1. 服务器规划

    • Jenkins服务器:2核4G+,用于运行Jenkins服务
    • Harbor服务器:4核8G+,用于存储Docker镜像
    • 应用服务器:根据项目需求配置,运行Docker容器
  2. 软件安装

    • 在所有服务器安装Docker:
      curl -fsSL https://get.docker.com | bash
      systemctl enable docker && systemctl start docker
      
    • 在Jenkins服务器安装Docker Compose:
      curl -L "https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      chmod +x /usr/local/bin/docker-compose
      

三、Harbor安装与配置

  1. 下载并解压Harbor

    wget https://github.com/goharbor/harbor/releases/download/v2.8.3/harbor-offline-installer-v2.8.3.tgz
    tar xvf harbor-offline-installer-v2.8.3.tgz -C /opt/
    cd /opt/harbor
    
  2. 配置Harbor

    cp harbor.yml.tmpl harbor.yml
    vi harbor.yml
    

    修改以下关键配置:

    hostname: harbor.example.com  # 修改为你的域名或IP
    http:
      port: 80
    harbor_admin_password: Harbor12345  # 管理员密码
    data_volume: /data/harbor  # 数据存储路径
    
  3. 生成证书(可选,推荐使用HTTPS)

    mkdir -p /data/cert
    openssl req -newkey rsa:4096 -nodes -sha256 -keyout /data/cert/harbor.key -x509 -days 365 -out /data/cert/harbor.crt
    

    更新harbor.yml启用HTTPS:

    https:
      port: 443
      certificate: /data/cert/harbor.crt
      private_key: /data/cert/harbor.key
    
  4. 安装Harbor

    ./install.sh
    
  5. 验证Harbor

    • 访问http://harbor.example.com
    • 使用admin/Harbor12345登录

四、Jenkins安装与配置

  1. 使用Docker安装Jenkins

    mkdir -p /data/jenkins_home
    chown -R 1000:1000 /data/jenkins_home  # Jenkins用户UID为1000
    
    docker run -d \
      --name jenkins \
      -p 8080:8080 \
      -p 50000:50000 \
      -v /data/jenkins_home:/var/jenkins_home \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v $(which docker):/usr/bin/docker \
      jenkins/jenkins:lts
    
  2. 初始化Jenkins

    • 访问http://jenkins-server:8080
    • 获取初始密码:
      docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
      
    • 安装推荐插件,创建管理员账号
  3. 安装必要插件

    • Docker Pipeline
    • Pipeline
    • Git
    • Credentials Plugin

五、Jenkins与Harbor集成

  1. 在Jenkins中添加Harbor凭证

    • 进入Jenkins → 凭据 → 系统 → 全局凭据
    • 添加用户名密码凭证,用户名和密码为Harbor的账号密码
  2. 配置Docker Host

    • 进入Jenkins → 管理Jenkins → 系统设置 → Docker
    • 添加Docker Host:unix:///var/run/docker.sock

六、Spring Boot项目配置

  1. 添加Dockerfile
    在Spring Boot项目根目录下创建Dockerfile

    FROM openjdk:17-jdk-slim
    VOLUME /tmp
    ARG JAR_FILE=target/*.jar
    COPY ${JAR_FILE} app.jar
    ENTRYPOINT ["java","-jar","/app.jar"]
    
  2. 添加Jenkinsfile
    在项目根目录添加Jenkinsfile

    pipeline {
        agent any
        
        environment {
            DOCKER_IMAGE = "harbor.example.com/devops/spring-boot-demo"
            DOCKER_TAG = "${env.BUILD_NUMBER}"
            HARBOR_CREDS = credentials('harbor-credentials')
        }
        
        stages {
            stage('Build') {
                steps {
                    sh 'mvn clean package -DskipTests'
                }
            }
            
            stage('Build Docker Image') {
                steps {
                    sh "docker build -t $DOCKER_IMAGE:$DOCKER_TAG ."
                }
            }
            
            stage('Push to Harbor') {
                steps {
                    sh "docker login -u $HARBOR_CREDS_USR -p $HARBOR_CREDS_PSW harbor.example.com"
                    sh "docker push $DOCKER_IMAGE:$DOCKER_TAG"
                    sh "docker tag $DOCKER_IMAGE:$DOCKER_TAG $DOCKER_IMAGE:latest"
                    sh "docker push $DOCKER_IMAGE:latest"
                }
            }
            
            stage('Deploy') {
                steps {
                    sh """
                    ssh user@deploy-server << EOF
                    docker login -u $HARBOR_CREDS_USR -p $HARBOR_CREDS_PSW harbor.example.com
                    docker stop spring-boot-demo || true
                    docker rm spring-boot-demo || true
                    docker run -d --name spring-boot-demo -p 8080:8080 $DOCKER_IMAGE:$DOCKER_TAG
                    EOF
                    """
                }
            }
        }
    }
    

七、Jenkins Pipeline配置

  1. 创建新Pipeline项目

    • 进入Jenkins → 新建任务 → 输入名称 → 选择Pipeline → 确定
  2. 配置Pipeline

    • 进入项目配置 → Pipeline部分
    • 定义方式选择"Pipeline script from SCM"
    • SCM选择Git,填写项目Git仓库地址
    • 指定Jenkinsfile路径

八、关键配置说明

  1. Harbor关键配置

    • harbor.yml中的hostname必须正确配置
    • 生产环境建议启用HTTPS
    • 可配置磁盘配额和垃圾回收策略
  2. Jenkins关键配置

    • 确保Jenkins用户有访问Docker的权限
    • 正确配置Harbor凭证
    • 确保Jenkins服务器可以SSH到部署服务器
  3. Jenkinsfile关键参数

    • DOCKER_IMAGE:镜像名称,格式为Harbor地址/项目名/镜像名
    • DOCKER_TAG:建议使用构建号或Git提交哈希
    • HARBOR_CREDS:Harbor凭证ID

九、优化建议

  1. 添加测试阶段
    Build阶段后添加测试步骤:

    stage('Test') {
        steps {
            sh 'mvn test'
        }
        post {
            always {
                junit 'target/surefire-reports/*.xml'
            }
        }
    }
    
  2. 使用Docker Compose部署
    创建docker-compose.yml并使用它部署:

    version: '3'
    services:
      spring-boot-demo:
        image: harbor.example.com/devops/spring-boot-demo:${BUILD_NUMBER}
        ports:
          - "8080:8080"
        environment:
          - SPRING_PROFILES_ACTIVE=prod
    
  3. 添加质量检测
    集成SonarQube进行代码质量检测:

    stage('Code Quality') {
        steps {
            sh 'mvn sonar:sonar'
        }
    }
    

十、故障排除

  1. Docker连接问题

    • 确保Jenkins容器可以访问宿主机的Docker daemon
    • 检查/var/run/docker.sock权限
  2. Harbor认证失败

    • 检查Harbor凭证配置是否正确
    • 确保Harbor服务器可以访问
    • 如果使用HTTPS,确保证书已正确配置
  3. 部署失败

    • 检查部署服务器SSH配置
    • 确保部署服务器可以访问Harbor
    • 检查容器运行日志:docker logs spring-boot-demo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2385232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python打卡训练营打卡记录day35

知识点回顾&#xff1a; 三种不同的模型可视化方法&#xff1a;推荐torchinfo打印summary权重分布可视化进度条功能&#xff1a;手动和自动写法&#xff0c;让打印结果更加美观推理的写法&#xff1a;评估模式 作业&#xff1a;调整模型定义时的超参数&#xff0c;对比下效果 1…

如何评价OpenRouter这样的大模型API聚合平台?

OpenRouter通过统一接口简化多模型访问与集成的复杂性,实现一站式调用。然而,这种便利性背后暗藏三重挑战:成本控制、服务稳定性、对第三方供应商的强依赖性。 现在AI大模型火得一塌糊涂,新模型层出不穷,各有各的长处。但是对于开发者来说,挨个去对接OpenAI、谷歌、Anthr…

5.2.4 wpf中MultiBinding的使用方法

在 WPF 中,MultiBinding 允许将多个绑定(Binding)组合成一个逻辑结果,并通过一个转换器(IMultiValueConverter)处理这些值,最终影响目标属性。以下是其核心用法和示例: 核心组件: MultiBinding:定义多个绑定源的集合。 IMultiValueConverter:实现逻…

技术服务业-首套运营商网络路由5G SA测试专网搭建完成并对外提供服务

为了更好的服务蜂窝无线技术及运营商测试认证相关业务&#xff0c;搭建了技术服务业少有的5G测试专网&#xff0c;可独立灵活配置、完整端到端5G&#xff08;含RedCap、LAN&#xff09;的网络架构。 通过走真正运营商网络路由的方式&#xff0c;使终端设备的测试和运营商网络兼…

仿腾讯会议——音频服务器部分

1、中介者定义处理音频帧函数 2、 中介者实现处理音频帧函数 3、绑定函数映射 4、服务器定义音频处理函数 5、 服务器实现音频处理函数

大文件上传,对接阿里oss采用前端分片技术。完成对应需求!

最近做了一个大文件分片上传的功能&#xff0c;记录下 1. 首先是安装阿里云 oss 扩展 composer require aliyuncs/oss-sdk-php 去阿里云 oss 获取配置文件 AccessKey ID *** AccessKey Secret *** Bucket名称 *** Endpoint *** 2. 前端上传&#xff0c;对文件进行分片…

【场景分析】基于概率距离快速削减法的风光场景生成与削减方法

目录 1 主要内容 场景消减步骤 2 部分代码 3 程序结果 1 主要内容 该程序参考文献《含风光水的虚拟电厂与配电公司协调调度模型》场景消减部分模型&#xff0c;程序对风电场景进行生成并采用概率距离方法进行消减&#xff0c;程序先随机生成200个风电出力场景&#xff0c;然…

【Java Web】3.SpringBootWeb请求响应

&#x1f4d8;博客主页&#xff1a;程序员葵安 &#x1faf6;感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb; 文章目录 一、请求 1.1 postman 1.2 简单参数 1.3 实体参数 1.4 数组集合参数 1.5 日期参数 1.6 JSON参数 1.7 路径参数 二、响应 2…

单片机中断系统工作原理及定时器中断应用

文件目录 main.c #include <REGX52.H> #include "TIMER0.H" #include "KEY.H" #include "DELAY.H"//void Timer0_Init() { // TMOD 0x01; // TL0 64536 % 256; // TH0 64536 / 256; // ET0 1; // EA 1; // TR0 1; //}unsigned char…

LangGraph-agent-天气助手

用于创建agent和多代理工作流 循环&#xff08;有迭代次数&#xff09;、可控、持久 安装langgraph包 conda create --name agent python3.12 conda activate agent pip install -U langgraph pip install langchain-openai设置 windows&#xff08;>结尾&#xff09; s…

深度学习——超参数调优

第一部分&#xff1a;什么是超参数&#xff1f;为什么要调优&#xff1f; 一、参数 vs 超参数&#xff08;Parameter vs Hyperparameter&#xff09; 类型定义举例是否通过训练自动学习&#xff1f;参数&#xff08;Parameter&#xff09;是模型在训练过程中通过反向传播自动…

创建型:建造者模式

目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 工作流程 2.3 实现案例 2.4 变体&#xff1a;链式建造者&#xff08;常见于多参数对象&#xff0c;无需指挥者&#xff09; 3、优缺点分析 4、适用场景 1、核心思想 目的&#xff1a;将复杂对象的构建过程与其表示分离…

UE4游戏查找本地角色数据的方法-SDK

UE4中&#xff0c;玩家的表示通常涉及以下几个类&#xff1a; APlayerController: 代表玩家的控制逻辑&#xff0c;处理输入等。 APawn: 代表玩家在世界中的实体&#xff08;比如一个角色、一辆车&#xff09;。APlayerController 控制一个 APawn。 ACharacter: APawn 的一个…

Java 连接并操作 Redis 万字详解:从 Jedis 直连到 RedisTemplate 封装,5 种方式全解析

引言 在分布式系统和高并发场景中&#xff0c;Redis 作为高性能内存数据库的地位举足轻重。对于 Java 开发者而言&#xff0c;掌握 Redis 的连接与操作是进阶必备技能。然而&#xff0c;从基础的 Jedis 原生客户端到 Spring 封装的 RedisTemplate&#xff0c;不同连接方式的原…

python web 开发-Flask-Login使用详解

Flask-Login使用详解&#xff1a;轻松实现Flask用户认证 1. Flask-Login简介 Flask-Login是Flask框架的一个扩展&#xff0c;专门用于处理用户认证相关的功能。它提供了用户会话管理、登录/注销视图、记住我功能等常见认证需求&#xff0c;让开发者能够快速实现安全的用户认证…

快速排序算法的C++和C语言对比

快速排序算法简介&#xff1a; 快速排序(Quick Sort)是一种高效的排序算法&#xff0c;采用分治法策略。它的基本思想是&#xff1a; 1. 从数列中挑出一个元素作为"基准" 2. 重新排序数列&#xff0c;所有比基准值小的元素放在基准前面&#xff0c;所有比基准值大的…

分布式事务知识点整理

目录 分布式事务问题&#xff1f;问题场景引入分布式事务的理论标准BASE理论附CAP理论 Two-phase Commit&#xff0c;2PC2PC系统组件两阶段执行过程2PC缺点 Three-Phase Commit&#xff0c;3PC三阶段执行过程 TTC(Try-Confirm-Cancel)seata项目以及原理how to define a Distrib…

鸿蒙UI开发——badge角标的使用

1、概 述 badge小红点角标是我们项目开发中常见的需求&#xff0c;信息标记组件&#xff0c;可以附加在单个组件上用于信息提醒的容器组件。效果如下&#xff1a; 2、Badge 接口定义如下&#xff1a; &#x1f449;&#x1f3fb; 根据数字创建标记组件&#xff1b; Badge(v…

批量打印的趣事

前言 PC端网页打印大量数据的时候&#xff0c;比如批量打印100个标签&#xff0c;会出现打印样式混乱的问题 问题 数据可以设定100~自定义阈值 {data.map((_, idx) > {return <Tag qrCode啊程是个大帅逼 code{AB-${idx1}} title雷猴 key{idx} />})} 打印预览到第3…

车载中央域控制器测试【BCM模块介绍-外灯3】

文章目录 1 摘要2 倒车灯2.1 倒车灯的作用与功能2.2 控制实现方案2.3 需求分析2.3.1系统需求2.3.2 功能安全需求&#xff08;ISO 26262 ASIL B&#xff09;*2.3.3 关联功能需求 3 角灯3.1 角灯&#xff08;Cornering Lamp&#xff09;核心作用与功能3.2 控制实现方案3.3 需求分…