Jenkins系列(五)----Jenkins自动发布spring-boot应用

2023-10-29

一、测试环境


三台服务器来测试,一台SVN服务器,一台Jenkins服务器,一台应用服务器,如下:

Jenkins服务器: 192.168.84.100

SVN服务器: 192.168.84.105

应用服务器:192.168.84.101


二、jenkins安装配置


首先去Jenkins官网下载Jenkins 选择LTS版本的war包进行下载



下载之后上传到服务器上去,然后,配置jenkins的安装路径,在Linux环境中,Jenkins主目录默认在/root/.jenkins我这里把它修改到/home/jenkins下,修改/etc/profile文件

[root@swarm1 jenkins]# vim /etc/profile

在后面加上

export JENKINS_HOME=/home/jenkins

然后使其生效

[root@swarm1 jenkins]# source /etc/profile

然后通过以下命令启动Jenkins,我这里没有使用tomcat来运行jenkins,而是直接采用命令的形式来运行的:

[root@swarm1 jenkins]# nohup java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war --httpPort=8899  >jenkins.out  2>&1 &

其中-Dhudson.util.ProcessTree.disable=true主要是用来解决execute shell无法启动进程用的,启动好之后,访问: http://192.168.84.100:8080/输入

/home/jenkins/secrets/initialAdminPassword

下的密码


使用推荐安装


创建一个用户


安装所需的两个插件:

1.Publish Over SSH
2.Maven Integration



安装好之后进行全局工具配置



对JDK和Maven进行配置



然后进行系统配置


配置SSH如下所示



Passphrase:密码(key的密码,如果你设置了)
Path to key:key文件(私钥)的路径
SSH Server Name:标识的名字(随便你取什么)
Hostname:需要连接ssh的主机名或ip地址,此处填写应用服务器IP(建议ip)
Username:用户名
Remote Directory:Remote Directory:用SSH连接后的远程根目录,这个目录是必须存在的,Jenkins不会自动创建目录。Jenkins会将文件远程复制到该目录。(注意:SSH连接的用户需要有权限才可以创建、删除、移动文件及文件夹)
"Use password authentication, or use a different key":使用密码验证(这里使用了密钥认证所以不开启)
配置完成后可点击“Test Configuration”测试到目标主机的连接,出现”success“则成功连接
Port:端口(默认22)
Timeout (ms):超时时间(毫秒)默认即可
Disable exec:禁止运行命令


配置完成后可点击“Test Configuration”测试到目标主机的连接,出现”success“则成功连接


如果有多台应用服务器,可以点击”增加“,配置多个“SSH Servers”点击“保存”以保存配置


三、项目构建运行


创建一个Maven项目



然后配置SVN,新增用户





在Build中输入如下maven命令

maven build后就是发布,那么该如何发布呢?说到发布,其实就是将项目构建结果move到它运行时应该所在的位置。那么这就需要使用Publish over SSH来Execute shell,配置如下


勾选仅在构建成功时运行


经测试如下写法才能正确启动应用才不会被jenkins杀掉


OLD_BUILD_ID=$BUILD_ID  
echo $OLD_BUILD_ID  
BUILD_ID=dontKillMe 
nohup java -jar /home/boot/demo/spring-boot-0.0.1-SNAPSHOT.jar &
sleep 3s
#改回原来的BUILD_ID值  
BUILD_ID=$OLD_BUILD_ID  
echo $BUILD_ID  

SSH Server Name:选个一个你在系统设置里配置的名字
Transfer Set Source files:需要上传的文件(注意:相对于工作区的路径。看后面的配置可以填写多个,默认用,分隔)
Remove prefix:移除目录(只能指定Transfer Set Source files中的目录,这里移除了target目录表示只将spring-boot-0.0.1-SNAPSHOT.jar传到目标服务器,否则会在目标服务器创建target目录)
Remote directory:远程目录(根据你的需求填写,这里没有填写默认会继承系统配置,即在SSH中配置的/home/boot目录下)

Exec command:把你要执行的命令写在里面(这里的命令是在目标服务器上执行的)

高级选项如下:


Exclude files:排除的文件(在传输目录的时较有用,使用通配符,例如:/*.log,/*.tmp,*.txt/)
Pattern separator:分隔符(配置Transfer Set Source files的分隔符)
No default excludes:禁止默认的排除规则
Make empty dirs:此选项会更改插件的默认行为。默认行为是匹配该文件是否存在,如果存在则创建目录存放。选中此选项会直接创建一个目录存放文件,即使是空目录。
Flatten files:只上传文件,不创建目录(除了远程目录)
Exec timeout (ms):运行脚本的超时时间(毫秒)
Exec in pty:模拟一个终端执行脚本
Add Transfer Set:增加一个传输配置

Remote directory is a date format:远程目录建立带日期的文件夹(需要在Remote directory中配置日期格式),具体格式参考下表:

Remote directory Directories created
‘qa-approved/’yyyyMMddHHmmss qa-approved/20101107154555
‘builds/’yyyy/MM/dd/’build-${BUILD_NUMBER}’ builds/2010/11/07/build-456 (if the build was number 456)
yyyy_MM/’build’-EEE-d-HHmmss 2010_11/build-Sun-7-154555
yyyy-MM-dd_HH-mm-ss 2010-11-07_15-45-55

然后点击立即构建


输出如下


在服务器上查看进程是否启动成功

[root@swarm2 demo]# ps -ef|grep 'java -jar'
root      28024      1 62 18:15 ?        00:00:08 java -jar /home/boot/demo/spring-boot-0.0.1-SNAPSHOT.jar
root      28071  17082  0 18:15 pts/0    00:00:00 grep --color=auto java -jar

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jenkins系列(五)----Jenkins自动发布spring-boot应用 的相关文章

  • 将 CommonJ 实现与 GlassFish 和 Spring 3 结合使用

    为了统一 Websphere 7 和 GlassFish 3 环境之间的部署 我决定尝试在 GlassFish 中实现 CommonJ WorkManager 和 TimerManager 但它并没有完全按预期工作 我做了以下事情 使用位于
  • Spring MVC - 自动查找验证器

    假设我有一个像这样的示例实体类 public class Address 和相应的验证器 Component public AddressValidator implements Validator Override public bool
  • @Transactional 注解属于哪里?

    如果您将 Transactional in the DAO类和 或其方法 或者注释使用 DAO 对象调用的服务类是否更好 或者注释两个 层 是否有意义 我认为事务属于服务层 它是了解工作单元和用例的人 如果您将多个 DAO 注入到需要在单个
  • 防止重写 bean 的 bean 定义

    我知道我们可以通过以下方式禁用 spring beans 的重载 GenericApplicationContext setAllowBeanDefinitionOverriding boolean b 弹簧参考 http static s
  • 如何向我的 Spring MVC REST 服务添加错误?

    如果用户没有输入我正在编码的两个名称 我如何更改 更新来自 Spring MVC 的以下 REST 调用以返回错误 未找到 RequestMapping value name method RequestMethod GET Respons
  • GWT、Maven、Spring - 在 Maven 构建上获取 com.thoughtworks.qdox.parser.ParseException:语法错误

    我正在尝试集成此演示中的代码 http code google com p gwt spring starter app http code google com p gwt spring starter app 进入我的主要 Spring
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • Spring Boot 中的 JSTL 支持

    虽然我知道有JSP 支持中的一些限制 http docs spring io spring boot docs current reference html boot features developing web applications
  • Spring 作为 JNDI 提供者?

    我想使用 Spring 作为 JNDI 提供程序 这意味着我想在 Spring 上下文中配置一个 bean 可以通过 JNDI 访问该 bean 这看起来像这样
  • Jenkins git 插件 - 有时太慢

    以下内容摘自 Jenkins 日志 00 00 03 135 gt git fetch tags progress email protected cdn cgi l email protection some org some repo
  • Jackson:将对象引用为属性

    在我的 java spring 应用程序中 我正在使用 hibernate 和 jpa 并使用 jackson 来填充数据库中的数据 这是用户类 Data Entity public class User Id GeneratedValue
  • Spring Web应用程序在启动时从数据库初始化

    Spring 3 1 汤姆猫 我这里有一个设计问题 数据库中已指定一组类别 这些类别可以被认为是全局的 因为它们可以在整个网络应用程序中使用 我想做的是在服务器启动时读取这些类别并用 Java 填充某种类型的集合 只需要在启动时从数据库读取
  • hibernate 6.0.2.Final 和 spring boot 2.7.0 的entityManagerFactory bean 未配置问题

    所以最近我想升级我的 Spring Boot 项目项目的一些依赖项 特别是这些组件 雅加达 EE 9 弹簧靴2 7 休眠 6 0 2 Final 完成此操作后 所有更新和代码折射 更新将 javax 导入到 jakarta 以及一些 hib
  • Spring Thymeleaf - 调用服务方法布尔值来显示 HTML 项目

    在我的标题 HTML 中 我显示一个 UL LI 菜单 其中 LI 项目之一的可见性取决于服务方法调用 我试过这个 家庭控制器 Controller public class HomeController private static fi
  • 如果目标上的消费者已关闭,则通知 ActiveMQ 生产者

    我正在使用 ActiveMQ 消息代理 并且我有一个要求 即生产者应用程序想要知道在特定目标上使用的消费者应用程序是否已启动 我怎样才能实现这个目标 Thanks 你应该结帐咨询信息 http activemq apache org adv
  • 让 gradle 执行 JUnit 测试(Android 应用程序、Android Studio)

    我目前正在开发一个 Android 应用程序 最近从 Eclipse 切换到 Android Studio 不是我的想法 不过 我想配置 jenkins 服务器来定期运行 JUnit 测试和其他测试 为了实现这一点 我尝试配置一个 grad
  • 如何在url请求中发送数组

    我的要求如下 我想给出演员姓名 开始日期 结束日期并获取他在该时期出演的所有电影 因此 我的服务请求是这样的 http localhost 8080 MovieDB GetJson name Actor startDate 20120101
  • Spring中的ProxyFactoryBean

    有人可以解释一下吗代理工厂Bean http static springsource org spring docs current javadoc api org springframework aop framework ProxyFa
  • Spring boot 中特定包的自定义日志文件

    我有一个带有专门操作的java包 专业化是因为它们很少被使用 并且我不想将它们与普通日志记录混合在一起 我知道添加logging file myapplication log会将日志记录重定向到此文件 但有没有办法指定仅从特定包记录到另一个
  • 如何使用自定义 JDK 构建 Jenkins 项目?

    我有一个常规的 Jenkins 实例 运行一些多分支管道 该实例在 JDK 11 上运行 因为 Jenkins 并不真正支持更高版本 没关系 但不好的是 我的所有管道似乎也都受到 Java 11 的限制 Jenkins 仅使用它自己也使用的

随机推荐

  • Nodejs

    一 是什么 中间件 Middleware 是介于应用系统和系统软件之间的一类软件 它使用系统软件所提供的基础服务 功能 衔接网络上应用系统的各个部分或不同的应用 能够达到资源共享 功能共享的目的 在NodeJS中 中间件主要是指封装http
  • 华为OD机试 - 阿里巴巴找黄金宝箱(IV)(Java)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面有一个数字 箱子排列成一个环 编号最大的箱子的下一个是编号为0的箱子 请输出每个箱了贴的数字之后的第一个比它大的数 如果不
  • java爱心效果代码来了

    爱心 代码来了 村上春树说 仪式是一件很重要的事 现实生活被琐事充斥 仪式感总是被人遗忘 凑合的晚饭 乱丢的衣物 杂乱无章的生活让原本平淡的生活过得一潭死水 找不到生活的乐趣 童话 小王子 里狐狸对小王子说 你最好在每天相同的时间来 比如你
  • scrapy提高爬取速度

    scrapy在单机跑大量数据的时候 在对settings文件不进行设置的时候 scrapy的爬取速度很慢 再加上多个页面层级解析 往往导致上万的数据可能爬取要半个小时之久 这还不包括插入数据到数据库的操作 下面是我在实验中测试并且验证爬取速
  • Docker 之桥接网络(一)

    参考 https docs docker com network bridge 在网络方面 桥接网络是一个链路层设备 它在网络段之间转发流量 网桥可以是运行在主机内核中的硬件设备或软件设备 就Docker而言 桥接网络使用软件桥 允许连接到
  • Windows下配置环境变量

    Windows下配置环境变量 在安装某些软件或者应用程序时 需要配置环境变量 以便在后续可以正常使用 环境变量相当于给系统或用户应用程序设置一些参数 具体起什么作用和对应的环境变量相关 比如path 是告诉系统 当要求系统运行一个程序而没有
  • React 18的新特新

    React 18 最新的特性 批处理文件 在同一个 函数中 调用多次 useState 也只是会更新一次 function App const count setCount useState 0 const flag setFlag use
  • 基于51单片机的水位液位温度监测鱼缸系统仿真原理图程序

    硬件设计 上一篇咱们讲了基于数码管显示的液位检测 本章讲一下基于LCD1602显示的液位检测 同时伴有温度测量 该系统可应用于鱼缸 水塔 水箱的检测 本系统液位检测方案是基于液位传感器 通过传感器嵌入液体反馈回电信号 通过电信号的大小可以反
  • 如何利用python将一个list中的数字提取,然后求和?

    coding UTF 8 import re name score list u 唐僧 100 u 猪八戒 60 u 孙悟空 95 u 沙和尚 80 1 将score list列表转换为以 为分隔符的字符串 name score list
  • 极限学习机ELM原理与实现

    极限学习机 ELM 是当前一类非常热门的机器学习算法 被用来训练单隐层前馈神经网络 SLFN 本篇博文尽量通俗易懂地对极限学习机的原理进行详细介绍 之后分析如何用python实现该算法并对代码进行解释 1 算法的原理 极限学习机 ELM 用
  • 【STM32】 JDY-31蓝牙模块

    目录 一 介绍 二 模块特点 三 产品应用范围 四 模块技术参数 五 模块接口说明 六 蓝牙模块接口电路图 七 蓝牙模块实物图 一 介绍 蓝牙模块是指集成蓝牙功能的芯片基本电路集合 用于无线网络通讯 本蓝牙模块就是为了只能无线数据传输而专门
  • 微服务 - 拆分微服务的问题和拆分方法

    概述 现在被谈论最多的就是微服务和中台系统 我个人的理解是微服务或者是中台好不好 主要看实际的业务场景 架构的变迁往往需要耗费很大的学习成本和时间成本 所以更改架构的时候要三思而后行 适合自己特别重要 由单体到多应用的演变 从我入职开始 公
  • 变压器哪些部位易造成渗油?

    变压器哪些部位易造成渗油 答 1 套管升高座电流互感器小绝缘子引出线的桩头处 所有套管引线桩头 法兰处 2 气体继电器及连接管道处 3 潜油泵接线盒 观察窗 连接法兰 连接螺丝紧固件 胶垫 4 冷却器散热管 5 全部连接通路碟阀 6 集中净
  • [前端] vue开发的项目用ajax发送请求携带cookie

    只需要在main js中写这三行代码即可 import axios from axios axios defaults withCredentials true 让ajax携带cookie Vue prototype axios axios
  • 初谈 ChatGPT

    引子 最近 小编发现互联网中的大 V 突然都在用 ChatGPT 做宣传 ChatGPT不会淘汰你 能驾驭ChatGPT的人会淘汰你 带领一小部分人先驾驭ChatGPT 确实 ChatGPT这个新生事物 如今被视为蒸汽机 电脑 iPhone
  • 众所周知,YouTube是个学习网站

    大数据文摘出品 来源 medium 编译 Hippo 国内有小破站 国外有YouTube 就像国内的b站一样 YouTube不仅是一个多媒体娱乐帝国 还是一个全面的学习平台 每月无需支付订阅费即可在YouTube上观看视频 所有供你观看和学
  • dev GridControl 按条件纵向合并单元格

    dev GridControl 按条件纵向合并单元格 gridView5 OptionsView AllowCellMerge true gridView5 CellMerge gridView5 CellMerge 自定义合并单元格监听事
  • npm安装报错 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree

    项目场景 安装npm报错npm ERR code ERESOLVE npm ERR ERESOLVE unable to resolve dependency tree 原因分析 ERESOLVE与npm 7 x的问题 7 x有些处理检测比
  • 黑马JVM总结(十五)

    1 GC 相关参数 2 GC 分析1 下面通过一个案例去读懂垃圾回收的一个过程 学会读懂垃圾回收的日志 XX UseSerialGC 是一个垃圾回收器 jdk8下默认的垃圾回收器不是它 改为UseSerialGC它的幸存区的比例才不会调整
  • Jenkins系列(五)----Jenkins自动发布spring-boot应用

    一 测试环境 三台服务器来测试 一台SVN服务器 一台Jenkins服务器 一台应用服务器 如下 Jenkins服务器 192 168 84 100 SVN服务器 192 168 84 105 应用服务器 192 168 84 101 二