Jenkins+Docker+Harbor快速部署Spring Boot项目详解
Jenkins+Docker+Harbor快速部署Spring Boot项目详解
Jenkins、Docker和Harbor是现代DevOps流程中的核心工具,结合使用可以实现自动化构建、测试和部署。下面我将详细介绍如何搭建这个集成环境。
一、各工具的核心作用
-
Jenkins
- 自动化CI/CD工具,负责拉取代码、编译、测试、构建Docker镜像并部署
- 提供可视化界面管理Pipeline
-
Docker
- 容器化平台,将应用及其依赖打包成独立容器
- 确保环境一致性,提高部署效率
-
Harbor
- 企业级Docker镜像仓库,存储和管理Docker镜像
- 支持权限控制、镜像复制、安全扫描等功能
二、环境准备
-
服务器规划
- Jenkins服务器:2核4G+,用于运行Jenkins服务
- Harbor服务器:4核8G+,用于存储Docker镜像
- 应用服务器:根据项目需求配置,运行Docker容器
-
软件安装
- 在所有服务器安装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
- 在所有服务器安装Docker:
三、Harbor安装与配置
-
下载并解压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
-
配置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 # 数据存储路径
-
生成证书(可选,推荐使用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: 443certificate: /data/cert/harbor.crtprivate_key: /data/cert/harbor.key
-
安装Harbor
./install.sh
-
验证Harbor
- 访问
http://harbor.example.com
- 使用
admin/Harbor12345
登录
- 访问
四、Jenkins安装与配置
-
使用Docker安装Jenkins
mkdir -p /data/jenkins_home chown -R 1000:1000 /data/jenkins_home # Jenkins用户UID为1000docker 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
-
初始化Jenkins
- 访问
http://jenkins-server:8080
- 获取初始密码:
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 安装推荐插件,创建管理员账号
- 访问
-
安装必要插件
- Docker Pipeline
- Pipeline
- Git
- Credentials Plugin
五、Jenkins与Harbor集成
-
在Jenkins中添加Harbor凭证
- 进入Jenkins → 凭据 → 系统 → 全局凭据
- 添加用户名密码凭证,用户名和密码为Harbor的账号密码
-
配置Docker Host
- 进入Jenkins → 管理Jenkins → 系统设置 → Docker
- 添加Docker Host:
unix:///var/run/docker.sock
六、Spring Boot项目配置
-
添加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"]
-
添加Jenkinsfile
在项目根目录添加Jenkinsfile
:pipeline {agent anyenvironment {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 << EOFdocker login -u $HARBOR_CREDS_USR -p $HARBOR_CREDS_PSW harbor.example.comdocker stop spring-boot-demo || truedocker rm spring-boot-demo || truedocker run -d --name spring-boot-demo -p 8080:8080 $DOCKER_IMAGE:$DOCKER_TAGEOF"""}}} }
七、Jenkins Pipeline配置
-
创建新Pipeline项目
- 进入Jenkins → 新建任务 → 输入名称 → 选择Pipeline → 确定
-
配置Pipeline
- 进入项目配置 → Pipeline部分
- 定义方式选择"Pipeline script from SCM"
- SCM选择Git,填写项目Git仓库地址
- 指定
Jenkinsfile
路径
八、关键配置说明
-
Harbor关键配置
harbor.yml
中的hostname
必须正确配置- 生产环境建议启用HTTPS
- 可配置磁盘配额和垃圾回收策略
-
Jenkins关键配置
- 确保Jenkins用户有访问Docker的权限
- 正确配置Harbor凭证
- 确保Jenkins服务器可以SSH到部署服务器
-
Jenkinsfile关键参数
DOCKER_IMAGE
:镜像名称,格式为Harbor地址/项目名/镜像名
DOCKER_TAG
:建议使用构建号或Git提交哈希HARBOR_CREDS
:Harbor凭证ID
九、优化建议
-
添加测试阶段
在Build
阶段后添加测试步骤:stage('Test') {steps {sh 'mvn test'}post {always {junit 'target/surefire-reports/*.xml'}} }
-
使用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
-
添加质量检测
集成SonarQube进行代码质量检测:stage('Code Quality') {steps {sh 'mvn sonar:sonar'} }
十、故障排除
-
Docker连接问题
- 确保Jenkins容器可以访问宿主机的Docker daemon
- 检查
/var/run/docker.sock
权限
-
Harbor认证失败
- 检查Harbor凭证配置是否正确
- 确保Harbor服务器可以访问
- 如果使用HTTPS,确保证书已正确配置
-
部署失败
- 检查部署服务器SSH配置
- 确保部署服务器可以访问Harbor
- 检查容器运行日志:
docker logs spring-boot-demo
相关文章:
Jenkins+Docker+Harbor快速部署Spring Boot项目详解
JenkinsDockerHarbor快速部署Spring Boot项目详解 Jenkins、Docker和Harbor是现代DevOps流程中的核心工具,结合使用可以实现自动化构建、测试和部署。下面我将详细介绍如何搭建这个集成环境。 一、各工具的核心作用 Jenkins 自动化CI/CD工具,负责拉取代…...

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

如何评价OpenRouter这样的大模型API聚合平台?
OpenRouter通过统一接口简化多模型访问与集成的复杂性,实现一站式调用。然而,这种便利性背后暗藏三重挑战:成本控制、服务稳定性、对第三方供应商的强依赖性。 现在AI大模型火得一塌糊涂,新模型层出不穷,各有各的长处。但是对于开发者来说,挨个去对接OpenAI、谷歌、Anthr…...
恢复二叉搜索树:递归与中序遍历的智慧应用
恢复二叉搜索树:递归与中序遍历的智慧应用 二叉搜索树(BST)是一种在算法世界里相当重要的数据结构,它的特性——左子树的节点值小于根节点,而右子树的节点值大于根节点——让它在查找、插入和删除操作上都能高效运行。然而,现实总是充满意外,有时候由于错误的操作或数据…...
从零开始构建一个区块链应用:技术解析与实践指南
区块链技术自比特币诞生以来,已经逐渐从金融领域扩展到更多行业,如供应链管理、物联网、智能合约等。它以其去中心化、不可篡改和透明性等特点,吸引了众多开发者的关注。然而,对于初学者来说,区块链技术的学习曲线可能…...

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

技术服务业-首套运营商网络路由5G SA测试专网搭建完成并对外提供服务
为了更好的服务蜂窝无线技术及运营商测试认证相关业务,搭建了技术服务业少有的5G测试专网,可独立灵活配置、完整端到端5G(含RedCap、LAN)的网络架构。 通过走真正运营商网络路由的方式,使终端设备的测试和运营商网络兼…...

仿腾讯会议——音频服务器部分
1、中介者定义处理音频帧函数 2、 中介者实现处理音频帧函数 3、绑定函数映射 4、服务器定义音频处理函数 5、 服务器实现音频处理函数...

大文件上传,对接阿里oss采用前端分片技术。完成对应需求!
最近做了一个大文件分片上传的功能,记录下 1. 首先是安装阿里云 oss 扩展 composer require aliyuncs/oss-sdk-php 去阿里云 oss 获取配置文件 AccessKey ID *** AccessKey Secret *** Bucket名称 *** Endpoint *** 2. 前端上传,对文件进行分片…...

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

【Java Web】3.SpringBootWeb请求响应
📘博客主页:程序员葵安 🫶感谢大家点赞👍🏻收藏⭐评论✍🏻 文章目录 一、请求 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和多代理工作流 循环(有迭代次数)、可控、持久 安装langgraph包 conda create --name agent python3.12 conda activate agent pip install -U langgraph pip install langchain-openai设置 windows(>结尾) s…...

深度学习——超参数调优
第一部分:什么是超参数?为什么要调优? 一、参数 vs 超参数(Parameter vs Hyperparameter) 类型定义举例是否通过训练自动学习?参数(Parameter)是模型在训练过程中通过反向传播自动…...
阿里云API RAG全流程实战:从模型调用到多模态应用的完整技术链路
一、引言 在企业级智能应用开发中,如何让大模型高效利用动态数据并生成准确回答,是构建智能问答系统的核心挑战。阿里云提供的API RAG(检索增强生成)流程,通过整合通义千问大模型、百炼智能体平台与知识库管理体系&am…...

创建型:建造者模式
目录 1、核心思想 2、实现方式 2.1 模式结构 2.2 工作流程 2.3 实现案例 2.4 变体:链式建造者(常见于多参数对象,无需指挥者) 3、优缺点分析 4、适用场景 1、核心思想 目的:将复杂对象的构建过程与其表示分离…...
Jenkins集成Docker与K8S构建
Jenkins 是一个开源的持续集成和持续交付(CI/CD)工具,广泛用于自动化软件开发过程中的构建、测试和部署任务。它通过插件系统提供了高度的可扩展性,支持与多种开发工具和技术的集成。 Jenkins 的核心功能 Jenkins 的主要功能包括自动化构建、测试和部署。它能够监控版本控…...
redis缓存实战-19(使用 Pub/Sub 构建简单的聊天应用程序)
实践练习:使用 Pub/Sub 构建简单的聊天应用程序 Redis Pub/Sub 是一项强大的功能,可在应用程序的不同部分之间实现实时通信。这是一种消息传递范例,其中发送方(发布者)不直接向特定接收方(订阅者)发送消息,而是将消息发布到通道。订阅者对一个或多个通道表示兴趣,并且…...

UE4游戏查找本地角色数据的方法-SDK
UE4中,玩家的表示通常涉及以下几个类: APlayerController: 代表玩家的控制逻辑,处理输入等。 APawn: 代表玩家在世界中的实体(比如一个角色、一辆车)。APlayerController 控制一个 APawn。 ACharacter: APawn 的一个…...
游园安排--最长上升子序列+输出序列
1.最长上升子序列,用二分贪心算法优化的那个 2.分割提取游客名字,与蓝肽子序列类似 3.关键是我不知道怎么输出答案序列,这里学习了一种不按序实现的,思想是倒序能凑上就加入,反正从ma开始遍历,生成一定是…...
缓存一致性与AI内容生成的幂等控制
缓存一致性与AI内容生成的幂等控制 在AI架构中,缓存系统作为提升响应速度与减少模型调用压力的关键组件,必须同时解决两个核心问题: 缓存一致性问题:数据源变动后,如何确保缓存及时更新、不过期、不脏读;…...

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

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

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

分布式事务知识点整理
目录 分布式事务问题?问题场景引入分布式事务的理论标准BASE理论附CAP理论 Two-phase Commit,2PC2PC系统组件两阶段执行过程2PC缺点 Three-Phase Commit,3PC三阶段执行过程 TTC(Try-Confirm-Cancel)seata项目以及原理how to define a Distrib…...
微信小程序数据接收
1.微信小程序蓝牙模块中的 wx.onBLECharacteristicValueChange 回调函数有时候一个数据包会分多个数据包回调,有时候多个数据包会合并成一个数据包回调,如果接收到数据包就处理业务,分拆的和合并的数据都会因为解析失败,导致业…...

鸿蒙UI开发——badge角标的使用
1、概 述 badge小红点角标是我们项目开发中常见的需求,信息标记组件,可以附加在单个组件上用于信息提醒的容器组件。效果如下: 2、Badge 接口定义如下: 👉🏻 根据数字创建标记组件; Badge(v…...

批量打印的趣事
前言 PC端网页打印大量数据的时候,比如批量打印100个标签,会出现打印样式混乱的问题 问题 数据可以设定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 功能安全需求(ISO 26262 ASIL B)*2.3.3 关联功能需求 3 角灯3.1 角灯(Cornering Lamp)核心作用与功能3.2 控制实现方案3.3 需求分…...

Linux系统基础——是什么、适用在哪里、如何选
一、Linux是什么 Linux最初是由林纳斯托瓦兹(Linus Torvalds)基于个人兴趣爱好开发的个人项目,他编写了最核心的内核;后面为了发展壮大Linux系统他将整个项目开源到GitHub上,可以让全世界的人都参与到项目的开发维护中…...