Jenkins持续集成与Web前端、SpringBoot项目的部署
Jenkins是一个开源的持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)工具,广泛应用于软件开发过程中。它基于Java开发,旨在提供一个开放易用的软件平台,帮助软件项目实现持续集成和持续交付。它的主要功能有以下几点:
1.自动化构建:Jenkins可以根据配置自动从代码仓库获取代码,并执行编译、打包等构建操作,例如对于Java项目进行Maven或Gradle构建。
2.集成多种工具:Jenkins能够与多种开发工具和技术集成,如Git、Subversion等版本控制系统,以及JUnit、Selenium等测试框架。
3.分布式构建:支持在多台机器上进行分布式的构建任务,以提高构建效率,缩短构建时间。
工作流程图:
提取 Jenkins镜像
[root@hw-81969 ~]# docker pull jenkins/jenkins
查看镜像
[root@hw-81969 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE
jenkins/jenkins latest 93d377dce516 2 days ago 441MB
运行docker镜像
[root@hw-81969 ~]# docker run -d -u root -p 1000:8080 -v /jenkins:/var/jenkins_home --name jenkins1 镜像id
访问 Jenkins http://ip地址:1000/
获取密码,根据它的提示到指定目录寻找,或者通过查看日志获取
[root@hw-81969 ~]# docker logs 镜像id
另外一种获取密码的方法:
docker exec -it [容器名称] /bin/bash
cat /var/jenkins_mount/secrets/initialAdminPassword
exit
输入密码后进入插件选择的界面,推荐安装就行
设定管理员账号,我们直接用admin账号
进入系统管理–>插件管理来安装我们下方用到的插件
Localization:Chinese(Simplified) 汉化插件
Gitee Plugin 对接gitee的插件
Publish Over SSH 远程连接访问的插件
Email Extension 发送邮件插件
NodeJS 构建Vue等项目
Docker Docker插件
Generic Webhook Trigger 触发构建任务
thinbackup 数据定期备份
等待其安装完毕,就可以开始使用,默认的站点比较慢,在【高级页面】更换其它国内的镜像
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
进入【新建任务】页面,输入名称选择【构建一个自由风格的软件项目】,保存。保存之后配置先不用配,进入下一步
生成令牌 — 路径:在gitee个人页面->【设置】->【私人令牌】->【生成新令牌】即可。生成完成后记得及时保存
在Jenkins面板点击【添加】,选择下图选项:成功之后记得保存
进入【我的视图】,找到刚新建的任务,进入配置页面, 对这个任务的构建进行配置
进入我们的gitee要部署的仓库项目的页面,把地址复制下来
配置远程服务器连接: 我们要用 Pushlish over SSH: 用来连接远程服务器,作为仓库服务器。下面开始配置
首先进入【系统管理】-> 【系统配置】,往下滑找到【Publish over SSH】,然后点击新增
成功之后,连接服务器的配置就完成了
配置邮箱通知信息
选择要通知的邮箱,开启smtp服务,我用的QQ邮箱,点击生成授权码保存下来。
到【系统管理】->【系统配置】配置我们的邮箱信息,共有3个地方需要填写
需要填写的信息
SMTP服务器: smtp.qq.com
用户默认邮件后缀 @qq.com
勾选【使用SSL协议】
SMTP端口 465
邮箱整合项目
首先呢先在具体任务的【构建后操作】去配置
构建模板
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head><body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"><table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sansserif"><tr><td>(本邮件是程序自动下发的,请勿回复!)</td></tr><tr><td><h2><font color="#0000FF">构建结果 - ${BUILD_STATUS}</font></h2></td></tr><tr><td><br /><b><font color="#0B610B">构建信息</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><ul><li>项目名称 : ${PROJECT_NAME}</li><li>构建编号 : 第${BUILD_NUMBER}次构建</li><li>Git版本 : ${GIT_REVISION}</li><li>触发原因: ${CAUSE}</li><li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li><li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li><li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li><li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li></ul></td></tr><tr><td><br /><b><font color="#0B610B">构建之后的变化</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><ul><li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li></ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true,format="Changes for Build #%n\n%c\n",showPaths=true,changesFormat="%a%m",pathFormat="\\t%p\\n"}</td></tr><tr><td><br /><b><font color="#0B610B">失败的测试结果</font></b></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><pre style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica,sans-serif">${FAILED_TESTS}</pre><br /></td></tr><tr><td><br /><b><font color="#0B610B">构建日志</font></b><hr size="2" width="100%" align="center" /></td></tr><tr><td><textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG}</textarea></td></tr></table>
</body></html>
修改【系统配置】中默认的邮箱设置可以达到复用效果
Jenkins的所有数据文件都存在文件中,Jenkins备份就是备份JENKINS_HOME目录。其中 workspace, builds 和 fingerprints目录是不需要备份的。
安装插件,在【系统管理】下方有【thinbackup】选项
内容从至下为备份、恢复、设置。需要设置的地方:
设定完成后点击save,保存,回到上一界面点击Backup Now。需要的时候点击还原备份,点击restore
部署web前端项目
传统web项目 : 新建我们的任务,步骤和上面介绍的一样,这里不再重复。然后把html文件拷贝到目标服务器
开启Nginx或者Tomcat服务,就可以运行了
部署Vue项目
需安装插件,所有用到的插件上面已经介绍过了
然后在【全局工具配置】配置node版本
接下来也需要配置SSH连接远程服务器, 配置完毕后,开始新建我们的任务,同样上面也介绍了怎样配置服务器和新建任务的步骤,这里不再重复
cd /var/jenkins_home/workspace/文件目录 #进入test项目目录
npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
npm install
npm run build
cd dist
rm -rf 文件名.tar.gz #删除上次打包生成的压缩文件
tar -zcvf 文件名.tar.gz * #把生成的项目打包成test方便传输到远程服务器
cd ../
最后一步,把文件发到远程服务器上,在【构建】或者【构建后操作】选择【send * over ssh】(因为效果是一样的,二者都可以),类似于部署传统web项目
SSH相关配置
dist/*.tar.gz
dist
usr/local/nginx/html/## shell脚本
cd /usr/local/nginx/html # 打开目标文件地址
rm -rf 文件夹名 # 删除包含目标文件的文件夹
mkdir 文件夹名 # 新建同名文件夹
tar -zxvf 文件名.tar.gz -C 文件夹名/ # 解压文件到这个文件夹的目录下
rm -rf 文件名.tar.gz # 删除压缩文件
部署SpringBoot项目 : 因为是java项目,所以我们首先要配置java环境,且用maven打包还要配置maven环境,当然你用其他的打包也可以
安装JDK
点击【系统管理】-> 【全局工具配置】即可进入配置面板
新增Maven
修改maven镜像源,改成阿里云镜像
<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public</url><mirrorOf>central</mirrorOf></mirror>
完成后点击保存即可,这样我们的jdk与maven就构建完成
部署服务
设置maven相关配置,然后保存
需要输入的命令
clean package
pom.xml
增加shell命令,自动部署运行
填入命令 注意这分为直接运行jar包与运行Docker容器运行两种类型,分别说明一下
jar包运行方式的脚本
sudo fuser -k -n tcp 项目端口号
cd 生成的jar包目录
nohup java -jar 文件名 > 日志目录文件地址 &
Docker容器运行的脚本
使用Docker运行首先需要制作Docker容器,在项目根目录编写Dockerfile文件,然后上传到代码仓库
#FROM openjdk:8-jdk-alpine
FROM hub.c.163.com/dwyane/openjdk:8
MAINTAINER qinadu<邮箱地址>
EXPOSE 8080 # 对外暴露的端口
CMD ["--server.port:8080"] # 映射端口
CMD echo "---Docker容器环境配置成功,即将运行---"
copy *.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
CMD echo "---服务开启成功,访问端口:8080---"
clean install -Dmaven.test.skip=true
最后在构建项目中执行shell脚本,保存
mvn docker:build -t 镜像别名
echo "当前docker 镜像:"
docker images | grep 镜像别名
echo "启动容器----->"
docker run -d -p --name 容器名 镜像别名
echo "启动服务成功!"
然后开始构建我们的项目,返回上一步,进入如下页面开始构建 (Build with Parameters)
改造shell脚本,如果下次构建该项目的时候,docker镜像和服务已存在,需要先删除镜像和服务
# 先删除之前的容器
echo "移除之前的容器>>>"
docker ps -a | grep 容器名 | awk '{print $1}'| xargs docker rm -f
# 删除之前的镜像
echo "移除之前的镜像>>>"
docker rmi 镜像别名
# 构建镜像
mvn docker:build -t 镜像别名
# 打印当前镜像
echo "当前镜像>>>"
docker images | grep 镜像别名
# 启动容器
echo "容器启动中>>>"
docker run -d -p --name 容器名 镜像别名
# 打印当前容器
echo "当前容器>>>"
docker images | grep 容器名
echo "启动服务成功!"
配置镜像容器服务
创建镜像仓库
使用jenkins构建
IMAGE_NAME='registry.cn-beijing.aliyuncs.com/{命名空间}/{仓库名称}:web-demo-0.0.1-SNAPSHOT'
echo IMAGE_NAME=$IMAGE_NAME
echo '================当前docker版本=============='
echo `docker -v`echo '================开始创建镜像================'
docker build -t $IMAGE_NAME .echo '================开始推送镜像================'
docker login --username={阿里云Registry登录名} --password={阿里云Registry登录密码} registry.cn-beijing.aliyuncs.com
docker push $IMAGE_NAME
echo '====================OK!================'
提取镜像
IMAGE_NAME='registry.cn-beijing.aliyuncs.com/{命名空间}/{仓库名称}:web-demo-0.0.1-SNAPSHOT'
docker pull $IMAGE_NAME
echo '====================OK!================'
相关文章:

Jenkins持续集成与Web前端、SpringBoot项目的部署
Jenkins是一个开源的持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)工具,广泛应用于软件开发过程中。它基于Java开发,旨在提供一个开放易用的软件平台,帮助软件项…...

如何使用Opentelemetry+jaeger对Go与Java项目实现分布式链路追踪
本文介绍![如何使用Opentelemetryjaeger实现分布式链路追踪] 关于opentelemetry的介绍可以看下面的文章 https://blog.csdn.net/qq_62368250/article/details/143516314本文中相关图片以及源代码地址 https://github.com/wuchenyanghaoshuai/others/blob/main/step39/README.…...

LabVIEW闭环控制系统硬件选型与实时性能
在LabVIEW闭环控制系统的开发中,硬件选型直接影响系统的实时性、精度与稳定性。需综合考虑数据采集速度(采样率、接口带宽)、计算延迟(算法复杂度、处理器性能)、输出响应时间(执行器延迟、控制周期&#x…...
Html5学习教程,从入门到精通, HTML5超链接应用的详细语法知识点和案例代码(18)
HTML5超链接应用的详细语法知识点和案例代码 超链接(Hyperlink),也称为跃点链接,是互联网和文档编辑中的一种重要概念。 超链接的定义 超链接是指从一个网页指向一个目标的连接关系,这个目标可以是另一个网页&#…...

STM32 HAL库 CAN过滤器配置
之前在STM32 f407 CAN收发 基于HAL库和Cubemx配置_stm32f407can收发程序-CSDN博客这篇博文里写了一下配置CAN收发的方法,当时由于并没有使用过滤器的现实需求,所以就也没仔细研究。现在工作中确实需要用到过滤器了,有些项目中控制器和发动机E…...
【前端面试题】Vu3常见的面试题
1.Vue3与 Vue2的核心区别有哪些? 响应式系统 : Vue2:通过Object.defineProperty 实现响应式。这种方式在处理对象属性的添加和删除时存在局限性,且无法直接监控数组的变化 ;Vue3:采用Proxy 实现响应式&…...

【数据分享】2001-2024年我国逐年植被净初级生产力(NPP)数据
植被净初级生产力(Net Primary Productivity,NPP)是生态学中的一个重要概念,表示单位面积植被在特定时间内吸收的净光合有机物,是衡量生态系统中植物通过光合作用所产生的有机物质减去植物呼吸作用消耗的有机物质的量&…...
java-正则表达式
一、正则表达式能干什么? ✅ 验证格式:手机号、邮箱、日期✅ 提取数据:从日志/文本中抓取关键信息✅ 替换文本:批量修改字符串内容 二、Java正则核心API Java中用 java.util.regex 包的两个类: Pattern:…...
正则表达式(复习)
文章目录 一、[]: 一个字符集合二、{}: 重复次数三、特殊符号四、(): 分组五、python代码示例六、注意 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个…...

sonarqube+SonarScanner+postpresql+jenkins
本地执行参考这篇 sonarqubeSonarScannerPostgreSQL实现代码质量扫描(windows)_sonarqube 10.7部署-CSDN博客 集成到Jenkins中操作如下 在 Jenkins 中安装 SonarQube Scanner 和配置 Job 1、安装 SonarQube Scanner 插件: 在 Jenkins 的管理…...
牛客周赛Round 84
本场比赛难度不大,也是本人第一次AK,最后一题用组合数学推公式,本篇博客主要讲解最后一题的思路 G-小红的陡峭值(五)(hard)_牛客周赛 Round 84 思路:本题要我们求p/q mod M ,即p*&am…...

TDengine 配置 ODBC 数据源
简介 TDengine ODBC 是为 TDengine 实现的 ODBC 驱动程序,支持 Windows 系统的应用(如 PowerBI 等)以及用户自定义开发的应用程序,通过 ODBC 标准接口访问本地、远程和云服务的 TDengine 数据库。 TDengine ODBC 提供基于 WebSo…...
numpy常用函数详解
在深度神经网络代码中经常用到numpy库的一些函数,很多看过之后很容易忘记,本文对经常使用的函数进行归纳总结。 np.arange arange是numpy一个常用的函数,该函数主要用于创建等差数列。它的使用方法如下所示: numpy.arange([star…...

deepseek 3FS编译
3FS在ubuntu22.04下的编译(记录下编译过程,方便后续使用) 环境信息 OS ubuntu 22.04内核版本 6.8.0-52-genericlibfuse 3.16.1rust 1.75.0FoundationDB 7.1.66meson 1.0.0ninja 1.10.1 libfuse编译 以下建议均在root下执行 pip3 install…...
【CXX】6.2 str — rust::Str
Rust::Str 公共 API // rust/cxx.hclass Str final { public:Str() noexcept;Str(const Str &) noexcept;Str(const String &) noexcept;// 如果输入不是 UTF-8,抛出 std::invalid_argument 异常。Str(const std::string &);Str(const char *);Str(con…...
制作三维软件学习路线
制作三维软件是一项复杂而富有挑战性的任务,涉及多个领域的知识。下面是一个建议的学习路线,涵盖从基础到高级的知识和技能。你可以根据自己的背景和兴趣进行调整。 ### 1. 编程基础 - **学习编程语言**:C或Python是常用的语言,了…...

【RabbitMQ】事务
事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的,…...
常见的交换机端口类型
在计算机网络中,Access端口 和 Trunk端口 是两种常见的交换机端口类型,主要用于VLAN(虚拟局域网)的配置。它们的主要区别在于如何处理VLAN标签和数据帧。 1. Access端口 Access端口通常用于连接终端设备(如PC、打印机…...
Linux Shell 脚本编程极简入门指南
一、学习前提准备 ✅ 环境要求: Linux系统(Ubuntu/CentOS等)或 WSL (Windows用户) 任意文本编辑器(推荐VSCode/Vim) 基础命令行操作能力 🔍 验证环境: # 查看系统默认Shell echo $SHELL #…...

【医院管理会计专题】7.解锁本量利分析:医院医疗服务决策的智慧密码
医院成本核算、绩效管理、运营统计、内部控制、管理会计专题索引 一、引言 在当今医疗行业竞争日益激烈的背景下,医院管理面临着诸多挑战,如何实现高效运营、提升服务质量并控制成本成为关键问题。管理会计作为一种重要的管理工具,在医院管理中发挥着越来越重要的作用。本…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...