Jenkins(三):自动化部署SpringBoot项目


前言

在软件开发过程中,自动化部署已经成为不可或缺的一环。Jenkins是一个广泛使用的开源自动化部署工具,它提供了强大的功能和灵活的配置选项,可以帮助开发团队实现高效的持续集成和持续部署。本文将详细介绍如何使用Jenkins自动化部署Spring Boot项目,以提高开发团队的效率和产品的交付速度。


一、安装Jenkins

首先,你需要在服务器或本地机器上安装Jenkins。你可以从Jenkins官方网站下载适合你操作系统的安装程序,并按照安装向导进行安装。安装完成后,你可以通过浏览器访问Jenkins的Web界面。具体安装步骤可以看这篇文章 如何安装-Jenkins

二、配置远端服务器

1.安装SSH

点击系统管理,点击插件管理

搜索栏输入“Publish Over SSH”

勾选安装完后,重启Jenkins

重启完后,登陆Jenkins,查看SSH插件是否已经安装完成

2.配置SSH

接下来,开始配置SSH Server。

 

往下滑,找到SSH Servers,然后点击新增

配置远程服务器的IP地址和账号、密码

Name:取一个自己容易认的名称,如**项目测试机

Hostname:指连接机器的IP或域名

Username:连接机器的用户,必须使用一个有权限的用户,如果觉得root太大,可在服务器另建一个用户,专门用来做jenkins访问使用的

Remote Directory:远程连接上去默认访问的路径,必须存在,并且有权限

勾选下方的权限选项,并设置一个密码password,此密码为登录用户名相对应的密码。

选择使用密码方式链接,输入账号的对应密码

填完后,验证一下配置是否正常,显示“Success”则代表配置没问题。然后点击保存即可。

二、配置Git

菜单入口

配置本地的Git安装路径

三、配置Maven

配置本地的maven安装路径

进入系统管理–系统设置,找到Maven项目配置,把全局MAVEN_OPTS改为如下:

四、配置JDK

配置本地的JDK安装路径

五、配置邮件

我们用的阿里云邮,所以用的是阿里的配置

阿里巴巴企业邮箱帮助中心 (mxhichina.com)

配置邮箱通知

设置邮件发送内容

代码内容如下:

<!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="100%" cellpadding="0" cellspacing="0"  style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">    
        <tr>    
            本邮件由系统自动发出,无需回复!<br/>            
            大家好,以下为 ${PROJECT_NAME } 项目构建信息</br> 
            <td><font color="#CC0000">构建结果 - ${BUILD_STATUS}</font></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>触发原因: ${CAUSE}</li>    
                    <li>构建状态: ${BUILD_STATUS}</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}${BUILD_NUMBER}/allure/">${PROJECT_URL}${BUILD_NUMBER}/allure/</a></li>    
                </ul>    

<h4><font color="#0B610B">失败用例</font></h4>
<hr size="2" width="100%" />
$FAILED_TESTS<br/>

<h4><font color="#0B610B">最近提交(#${GIT_REVISION})</font></h4>
<hr size="2" width="100%" />
<ul>
${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}
</ul>
详细提交: <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a><br/>

            </td>    
        </tr>    
    </table>    
</body>    
</html>

注意事项: 

六、构建maven项目

1.安装maven插件

输入搜索关键字: Maven Integration Plugin  或者 Pipeline Maven Integration Plugin ,搜索到了以后,点击直接安装

 安装完成后重启就好了。

2.构建maven项目

配置项目的Git仓库地址

构建触发器

我们是自己部署Git服务器(Bonobo Git Server),并没有用GitHub或者GitLab。

Bonobo Git Server 如果要用webHook的话,需要找到其仓库目录,找到对应项目的文件夹,然后添加post-receive(监听钩子)

文件内容如下,只是一个大概思路,配合Jenkins接口使用的。

#!/bin/bash
echo post-update23													
															
															
# exec git update-server-info													
															
while read oldrev newrev refname													
do													
	echo post-update4													
	branch=$(git rev-parse --symbolic --abbrev-ref $refname)												
"    if [ ""master"" == ""$branch"" ]; then"													
"        echo ""正在触发远程编译..."""													
		"# exec ""xx-cmd"" http://{jenkins-user-name}:{jenkins-user-token}@jenkins.yourdomain.com/job/{jobName}/build?token={jobToken}"											
		curl http://localhost:8081/job/test/build?token=token_test											
	else												
		"echo ""非master提交,无需编译"""											
	fi													
done

构建环境

把maven打包好的Jar包上传到远程服务器

tly-business/tly-server/target/*.jar 这个是Jenkins工作空间的项目路径

/deploy/uploadJar  这是远端服务器的Jar包存放目录(自定义的)

发布步骤

选择 "Send files or execute commands over SSH",发送文件或者执行远程命令

执行Shell脚本,操作网站服务停止、备份旧Jar包、运行新Jar包

最后点击保存即可。然后回到控制面板,点击运行,就会开始自动构建——打包——部署。

执行后,点击任务详情,左下角就有每次构建的记录

到这里,就已经完成了Jenkins的自动化部署项目了。


总结

使用Jenkins自动化部署Spring Boot项目可以大大提高开发团队的效率和产品的交付速度。通过安装Jenkins、配置项目、构建触发器和构建步骤等步骤,你可以实现持续集成和持续部署的流程。Jenkins提供了丰富的插件和灵活的配置选项,可以适应不同的项目需求。通过监控构建过程和及时处理构建失败,你可以快速定位和修复问题。最后,通过自动化部署,你可以快速将应用程序部署到目标环境中,实现快速迭代和交付高质量的软件产品。使用Jenkins的自动化部署流程,你可以节省时间和精力,让开发团队专注于软件开发和质量保证,从而提升整体的开发效率和产品质量。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

爬取58二手房并用SVR模型拟合

目录 一、前言 二、爬虫与数据处理 三、模型 一、前言 爬取数据仅用于练习和学习。本文运用二手房规格sepc(如3室2厅1卫)和二手房面积area预测二手房价格price&#xff0c;只是练习和学习&#xff0c;不代表如何实际意义。 二、爬虫与数据处理 import requests import cha…

EasyX图形库学习(二、文字输出)

目录 一、文字绘制函数 字体属性结构体:logfont 文字输出 outtextxy 在指定位置输出字符串。 ​编辑 但如果直接使用,可能有以下报错&#xff1a; 三种解决方案&#xff1a; 将一个int类型的分数,输出到图形界面上 如果直接使用&#xff1a; 会把score输入进去根据A…

【Vue.js设计与实现】第二篇:响应系统-阅读笔记(持续更新)

从高层设计的角度去探讨框架需要关注的问题。 系列目录&#xff1a; 标题博客第一篇&#xff1a;框架设计概览【Vue.js设计与实现】第一篇&#xff1a;框架设计概览-阅读笔记第二篇&#xff1a;响应系统【Vue.js设计与实现】第二篇&#xff1a;响应系统-阅读笔记第三篇&#x…

洗地机哪个品牌质量好?盘点当下最值得买的4款洗地机型号推荐

随着生活节奏的加快&#xff0c;人们对于家庭清洁的需求也越来越迫切。而洗地机作为家庭清洁利器备受青睐&#xff0c;但洗地机也分为很多款式&#xff0c;每一个款式都具备不同的清洁效果&#xff0c;可以节省不少时间。接下来&#xff0c;就由笔者为大家详细介绍一下洗地机哪…

如何去除图片水印?三个简单实用方法

随着数字时代的来临&#xff0c;我们每天都会接触到大量的图片&#xff0c;然而&#xff0c;许多图片却因为水印而影响了美观。为了解决这个问题&#xff0c;我们需要图片去水印的方法。今天&#xff0c;我们就来为大家介绍几个简单实用的方法&#xff0c;可以轻松去除水印&…

备战蓝桥杯---搜索(优化1)

显然&#xff0c;我们可以用BFS解决&#xff0c;具体实现与八数码类似&#xff1a; 下面是代码&#xff1a; #include<bits/stdc.h> using namespace std; #define N 3000000 string a,b; int hh,dis[N],cnt; struct node{string u,v; }bian[7]; map<string,int>…

Flutter 和 Android原生(Activity、Fragment)相互跳转、传参

前言 本文主要讲解 Flutter 和 Android原生之间&#xff0c;页面相互跳转、传参&#xff0c; 但其中用到了两端相互通信的知识&#xff0c;非常建议先看完这篇 讲解通信的文章&#xff1a; Flutter 与 Android原生 相互通信&#xff1a;BasicMessageChannel、MethodChannel、…

MongoDB复制集实战及原理分析

文章目录 MongoDB复制集复制集架构三节点复制集模式PSS模式&#xff08;官方推荐模式&#xff09;PSA模式 典型三节点复制集环境搭建复制集注意事项环境准备配置复制集复制集状态查询使用mtools创建复制集安全认证复制集连接方式 复制集成员角色属性一&#xff1a;Priority 0属…

match-case与if/elif/else(python)

if/elif/else语句应对一般场景&#xff0c;match-case主打复杂条件分支语句。 (笔记模板由python脚本于2024年01月28日 18:27:37创建&#xff0c;本篇笔记适合有一定编程基础&#xff0c;对python基础已比较扎实的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1…

uniapp使用u-popup组件弹窗出现页面还可滑动

*1、问题所在&#xff1a; 弹窗遮罩层出现了页面依旧可以上下滑动 2、要求: 为了用户更好交互体验&#xff0c;弹窗出现后应禁止页面往下滑动 3、实现思路&#xff1a; 在弹窗盒子外层添加个阻止触摸冒泡事件&#xff0c;使用touchmove.stop.prevent 4、代码如下&#xff…

eosio.token 智能合约介绍

一、目的 eosio.token系统合约定义了允许用户为基于EOSIO的区块链创建、发行和管理代币的结构和操作&#xff0c;它演示了一种实现允许创建和管理代币的智能合约的方法。本文详细介绍了eosio.token系统合约并在本地测试链上实际发行了代币进行演示&#xff0c;适用于EOS智能合…

OJ刷题:《剑指offer》之单身狗1、2 !(巧用位操作符,超详细讲解!)

目录 1.单身狗1 1.1 题目描述 1.2排序寻找 1.3巧用位操作符 2.单身狗2 1.1 题目描述 1.2排序寻找 1.3巧用位操作符 不是每个人都能做自己想做的事&#xff0c;成为自己想成为的人。 克心守己&#xff0c;律己则安&#xff01; 创作不易&#xff0c;宝子们&#xff01;如…

homework day3

第三章 类与构造函数 一&#xff0e;选择题 1、下列不能作为类的成员的是&#xff08;B&#xff09; A. 自身类对象的指针 B. 自身类对象 C. 自身类对象的引用 D. 另一个类的对象 2、假定AA为一个类&#xff0c;a()为该类公有的函数成员&#xff0c;x为该类的一个对象&am…

如何在一台MacBook上构建大模型知识库?

▼最近直播超级多&#xff0c;预约保你有收获 今晚直播&#xff1a;《构建大模型知识库案例实战》 —1— 如何在一台 MacBook 上构建企业知识库&#xff1f; 最核心最重要的是我们手上的文档资料出于安全要求&#xff0c;不能随便上传到云服务&#xff0c;也就无法实际验证知识…

单链表的经典题目练习

哈喽&#xff0c;小伙伴们&#xff0c;上一次我们学习了单链表的知识&#xff0c;这次我们就要运用学到的知识来做一些相关的题目。我们都知道&#xff0c;要学好数据结构与算法&#xff0c;一定要多刷相关的题目才能有所提高。所以我们一起来学习一些单链表的经典题目算法题。…

操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构

目录 操作系统 windows macos Linux 服务器搭建网站 关于解释器的流程 curl -I命令 名词解释 dos bash/terminal&#xff0c;(终端) nginx/apache&#xff08;Linux平台下的&#xff09; iis&#xff08;Windows平台下的&#xff09; GUI(图形化管理接口&#xff…

Multisim14.0仿真(四十九)共阴极/阳极7段数码管驱动设计

一、74LS47/48简介: 74LS47/48芯片是一种常用的七段数码管译码器驱动器,常用在各种数字电路和单片机系统的显示系统中. 二、74LS47/48引脚说明及定义: 7段显示译码器74LS47/48是输出低/高电平有效的译码器,74LS47/48除了有实现7段显示译码器基本功能的输入(DCBA)和输出(Ya…

小程序<swiper/>组件详解及使用指南

目录 引言微信小程序的重要性Swiper组件的角色与功能简介Swiper组件基础Swiper组件的定义与使用场景如何在微信小程序中引入Swiper组件Swiper组件的基本结构与属性Swiper组件的高级应用自定义Swiper指示点样式实现Swiper的动态效果(如自动播放、循环播放)说明引言 微信小程序…

时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于CNN-BiLSTM-AdaBoost卷积双向长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab实现…

【C++】类和对象之运算符重载(三)

前言&#xff1a;在前面我们知道在类和对象中有六个默认成员函数&#xff0c;并学习了其中三个构造函数、析构函数、拷贝构造函数&#xff0c;今天我们将进一步的学习.赋值运算符重载。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质…