Jenkins自动化部署SpringBoot项目(windows环境)

news2024/11/18 6:01:41

文章目录

  • 1、Jenkins介绍
    • 1.1、概念
    • 1.2、优势
    • 1.3、Jenkins目的
  • 2、环境准备
  • 3、Jenkins下载
    • 3.1、下载
    • 3.2、运行
    • 3.3、问题解决
  • 4、Jenkins配置
    • 4.1、用户配置
    • 4.2、系统配置
    • 4.3、全局工具配置-最重要
  • 5、新建项目
  • 7、测试
  • 8、错误解决

1、Jenkins介绍

1.1、概念

  1. Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具
  2. Jenkins是一个可扩展的持续集成引擎
  3. 用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能

持续集成

  • 就是通常所说的CI(Continues Integration),可以说是现代软件技术开发的基础

  • 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也意味着每天可能会发生多次集成。

    每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件

1.2、优势

  1. Jenkins是一个自包含的基于java的程序,可以开箱即用,包含Windows、Linux等操作系统的软件包
  2. Jenkins可以通过其web界面轻松设置和配置,其中包括动态错误检查和内置帮助
  3. 在插件中心中有数百个插件,Jenkins集成了持续集成和持续交付工具链中的几乎所有工具
  4. Jenkins可以轻松地跨多台机器分配工作,帮助更快地跨多个平台进行构建、测试和部署
  5. Jenkins可以通过其插件架构进行扩展,为Jenkins所能做的事情提供了几乎无限的可能性
  6. 作为可扩展的自动化服务器,Jenkins可以用作简单的CI服务器,也可以变成任何项目的持续交付中心

1.3、Jenkins目的

  • Jenkins 主要是监控软件开发流程,快速显示问题。所以能保证开发人员以及相关人员省时省力提高开发效率
  • CI系统在整个开发过程中的主要作用是控制:当系统在代码存储库中探测到修改时,它将运行构建的任务委托给构建过程本身
  • 如果构建失败了,那么CI系统将通知相关人员,然后继续监视存储库。它的角色看起来是被动的;但它确能快速反映问题

2、环境准备

我们本文主要介绍在windows系统中安装和使用Jenkins,那么在此之前,请先保证你电脑上有如下环境:

  1. JDK8(我这里就是JDK8的环境)
  2. git(我这里使用的版本是:2.37.1.windows.1)
  3. maven(我这里使用的版本是:3.8.6)
  4. 一个保存SpringBoot项目代码的git仓库(注意:该项目的启动端口不能与Jenkins相同!Jenkins默认为8080)

我这里的SpringBoot项目git地址是:https://gitee.com/colinWu_java/JenkinsTest.git,项目启动端口是:8001

3、Jenkins下载

3.1、下载

下载网址:https://get.jenkins.io/war-stable

下载war包即可,如下:

image-20230106153727242

注意JDK的版本,你下载的版本太高的话,需要JDK的版本也会很高,所以看清楚了再下载,下载需要时间很久。我这里选择的是【2.346.3】,然后下载:

image-20230106171312403

下载的包如下:

image-20230106153429993

3.2、运行

然后用cmd进入目录后,运行jenkins:

java -jar jenkins.war

如下:

image-20230106155150221

如果你的JDK版本不支持的话就会报错了,如下:

image-20230106153935603

此时,你要么就升级你的JDK,要么就换一个低版本的jenkins,推荐换一个低版本的jenkins,因为JDK版本升级的话影响太广泛了

然后访问jenkins,在浏览器输入:http://localhost:8080,如下:

image-20230106155239337

3.3、问题解决

如果上面界面等待几秒,还是这个界面,那就是jenkins镜像有问题,按照下面步骤解决

1、第一次运行jenkins后,会在C盘的用户目录中,生成一个.jenkins文件夹,进入到该文件夹

image-20230106155358225

2、找到文件:hudson.model.UpdateCenter.xml

image-20230106155458946

3、编辑这个文件

image-20230106155556538

镜像有很多种,大家可以自行百度一下

4、重启jenkins,再访问http://localhost:8080,就会进入到密码认证界面:

image-20230106155817278

cmd窗口中,会打印密码,直接复制填入即可

image-20230106155854298

然后加载一会之后出现如下配置界面了:

image-20230106160036499

点击【安装推荐的插件】即可:

image-20230106173438387

4、Jenkins配置

4.1、用户配置

上面页面可能花的时间会比较久,安装完成后是这样的界面:

image-20230106173700329

我这里设置到账号是:wjb,密码是:itsource123,然后点击【保存并完成】:

image-20230106173754353

然后:

image-20230106173951689

点击【开始使用Jenkins】按钮即可

image-20230106174050023

4.2、系统配置

image-20230106174448510

image-20230106174602728

4.3、全局工具配置-最重要

下面几项必须配置:

  • maven
  • git
  • JDK

image-20230106174734798

image-20230106174833096

然后继续配置JDK:

image-20230106174903150

image-20230106175156566

然后继续配置git:

image-20230108142434449

最后配置maven:

image-20230106183900230

安装maven插件:

image-20230106184113744

安装插件进度页面:

image-20230106184130921

然后重启一下Jenkins

5、新建项目

新建Item:

image-20230106183317074

image-20230106184604369

在源码管理设置模块,选择Git,然后输入Gitee项目仓库地址,如下图:

image-20230106184742768

继续往下翻,构建触发器处,勾选Poll SCM,并输入如下信息:

* * * * *

如下:

image-20230106184917248

5个星号这是什么意思?
这5个符号的位置,分别表示分、时、日、月、周
上图中的五个*,其含义已由黄色字体显示,表示每分钟轮询一次Gitee仓库,如果仓库有更新,则重新拉取项目,进行持续集成与持续部署。
如果输入H/5 * * * *,则表示每5分钟轮询一次。

继续下翻,Build处,添加如下格式的Goals and options:

clean package -DskipTests install

如下:

image-20230106192218619

继续往下翻,POST Steps 处,勾选 Run regardless of build result,然后添加构建步骤(Add post-build step),选择执行Windows批处理命令(Execute Windows batch command),然后输入下面内容:

@echo off
set BUILD_ID=DONTKILLME
set port=8001
for /f "tokens=1-5" %%i in ('netstat -ano^|findstr ":%port%"') do taskkill /pid %%m -t -f

xcopy C:\Users\it206\.jenkins\workspace\JenkinsTest\target\sp-test.jar F:\jenkins\workspace\JenkinsTest\ /Y
echo 复制jar包完成
echo 执行【sp-test.jar】---开始
start javaw -jar F:\jenkins\workspace\JenkinsTest\sp-test.jar >> springboot.log 2>&1 &
echo 执行【sp-test.jar】---结束

exit

相关参数介绍:

1、set BUILD_ID=DONTKILLME
Jenkins默认会在Build结束后Kill掉所有的衍生进程,设置不要kill

2、xcopy 源文件 目的文件
将源文件复制到目标文件夹下
为什么要复制一份?
下次构建的时候,需要删除现有的jar,重新构建新的jar;如果直接运行生成的jar,下次构建的时候,无法删除,构建失败。

3、echo xxx
这里只是在jenkins的控制台输出日志信息

4、start javaw -jar xxx.jar &    这里是告诉系统,我的jar文件是后台执行,最后的符号 & 一定要加,否则jenkins会认为任务结束,会把我们的jar强制kill掉

如下:

image-20230108153730187

最后点击【保存】按钮,然后开始构建:

image-20230108153823283

这样查看日志:

image-20230108154025755

然后就可以看到日志详情了:

image-20230108153641253

也可以在首页进行构建:

image-20230106193301196

然后看本地磁盘,jar包已经复制到我指定目录了:

image-20230108154121248

但是我指定的日志文件还是回生成在Jenkins的默认目录,如下:

image-20230108154503441

7、测试

我Gitee上的SpringBoot项目地址是:https://gitee.com/colinWu_java/JenkinsTest.git

测试接口代码如下:

package cn.itsource.controller;

import org.springframework.web.bind.annotation.*;

/**
 * <p>TestController</p>
 *
 * @author 波波老师(微信 : javabobo0513)
 */
@RestController
public class TestController {

    @GetMapping("/test")
    public String test(){
        return "欢迎来到SpringBoot奇妙世界!";
    }

}

然后Jenkins构建后就访问页面,如下:

image-20230106192944940

完美,可以正常显示接口的返回数据,部署成功了,然后我们修改一下接口的返回数据,改成下面这样:

package cn.itsource.controller;

import org.springframework.web.bind.annotation.*;

/**
 * <p>TestController</p>
 *
 * @author 波波老师(微信 : javabobo0513)
 */
@RestController
public class TestController {

    @GetMapping("/test")
    public String test(){
        return "欢迎来到SpringBoot奇妙世界!Jenkins学习";
    }

}

然后代码提交到gitee,等一分钟后,再刷新页面,看页面如下:

image-20230108145620833

内容是我们修改后的值,说明Jenkins确实重新拉取项目重新部署了,nice啊,以后我们修改完代码后直接提交就可以了,部署就不用管了,是不是很香

8、错误解决

如果你Jenkins的控制台中出现如下日志信息:

image-20230108153145084

在全局安全配置里面,勾选上这个参数即可:

image-20230108153402788

如果本文对你有帮助的话,记得点个赞哦

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

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

相关文章

自动化测试Seleniums~1

一.什么是自动化测试 1.自动化测试介绍 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条件包括正常和异常&#xff0c;最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 将测试人员双手解放&#xff0c;将部分测…

黑马javaWeb Brand综合案例

01-综合案例-环境搭建 02-查询所有-后台&前台

leetcode83周赛

前言&#xff1a; 周赛两题选手,有点意思 830.较大分组的位置 思路&#xff1a;wa了三发&#xff0c;对边界了解的不够清楚 可以有一个小小的优化,时间复杂度O(n) // arr.add(start); //arr.add(i-1); //res.add(arr); res.add(Arrays.asList(start,i - 1));class Solution {pu…

MATLAB-mesh/ezmesh函数三维图形绘制

l ) mesh 函数生成由X、Y和Z指定的网线面&#xff0c;由C指定颜色的三维网格图。具体调用方法如下。mesh(Z):分别以矩阵Z的行、列下标作为x轴和y轴的自变量绘图。mesh(X , Y,Z):最常用的一般调用格式。mesh(X,Y ,Z,C):完整的调用格式&#xff0c;C用于指定图形的颜色&#xff0…

Ubuntu 20.4 美化桌面、美化引导界面、Mac 既视感

文章目录相关资源安装 gnome-tweaks安装浏览器插件方法一方法二&#xff08;推荐&#xff09;主题美化进行美化配置效果图美化前美化后美化 Dock扩展推荐引导美化安装主题修改配置相关资源 https://pan.baidu.com/s/1D7ZfzVKMmeZPAzuDDAVUbg提取码&#xff1a;ws3f 安装 gnom…

Java基础学习笔记(十)—— 包装类与泛型

包装类与泛型1 包装类1.1 基本类型包装类1.2 Integer类1.3 自动装箱 / 拆箱2 泛型2.1 泛型概述2.2 泛型的用法2.3 类型通配符1 包装类 1.1 基本类型包装类 基本类型包装类的作用 将基本数据类型封装成对象 的好处在于可以在对象中定义更多的功能方法操作该数据 public stat…

C库函数:stdlib.h

stdlib.h C 标准库 – <stdlib.h> | 菜鸟教程 (runoob.com) 该库主要涉及“字符串和其他类型数据的转换”、“内存空间的申请和释放”、“查找和排序”、随机数等功能函数。 7void *calloc(size_t nitems, size_t size) 分配所需的内存空间&#xff0c;并返回一个指向它…

大幅度减少零样本学习所需的人工标注

零样本旨在模仿人类的推理过程&#xff0c;利用可见类别的知识&#xff0c;对没有训练的样本不可见类别进行识别&#xff0c; 类别嵌入&#xff1a;Class embedding&#xff1a; 描述类别语义和视觉特征的向量&#xff0c;能够实现知识在类别间的转移&#xff0c;因而在零样本…

Web进阶:Day2 空间转换、动画

Web进阶&#xff1a;Day2 Date: January 4, 2023 Summary: 空间转换、动画 空间转换 **空间&#xff1a;**是从坐标轴角度定义的。 x 、y 和z三条坐标轴构成了一个立体空间&#xff0c;z轴位置与视线方向相同 空间转换也叫3D转换 属性&#xff1a;transform 语法&#xff1…

SolidWorks二次开发 API-获取当前语言与重命名文件

新的一年了&#xff0c;开始新的分享。 做SolidWorks二次开发的时候&#xff0c;难免会遇到多语言的问题。 针对不同语言的客户生成不同语言的菜单&#xff0c;所以我们要知道Solidworks的当前界面语言是什么。 这个就简单的说一下方法: GetCurrentLanguage 看结果&#xff1a;…

二、MySQL进阶教程

mysql高级 1&#xff0c;约束 上面表中可以看到表中数据存在一些问题&#xff1a; id 列一般是用标示数据的唯一性的&#xff0c;而上述表中的id为1的有三条数据&#xff0c;并且 马花疼 没有id进行标示 柳白 这条数据的age列的数据是3000&#xff0c;而人也不可能活到3000岁…

Curator实现分布式锁(可重入 不可重入 读写 联锁 信号量 栅栏 计数器)

文章目录前言代码实践1. 配置2. 可重入锁InterProcessMutex3. 不可重入锁InterProcessSemaphoreMutex4. 可重入读写锁InterProcessReadWriteLock5. 联锁InterProcessMultiLock6. 信号量InterProcessSemaphoreV27. 栅栏barrier8. 共享计数器8.1. SharedCount8.2. DistributedAto…

再学C语言28:输入和输出——重定向和文件

默认情况下&#xff0c;使用标准I/O包的C程序将标准输入作为其输入源&#xff0c;即标识为stdin的流 stdin流是作为向计算机中读取数据的常规方式而建立&#xff0c;可以是键盘、语音等不同输入设备 现代计算机还可以从文件中需求其输入&#xff0c;而不仅仅是传统的输入设备…

【docker10】Docker容器数据卷

Docker容器数据卷 1.Docker容器数据卷是什么 注意(坑): 容器卷记得加入 --privilegedtrue 为什么: docker挂载主目录访问如果出现cannot open directory.:Permission denied 解决办法: 在挂在目录后多加一个–privilegedtrue参数即可 如果是CentOS7安全模块会比之前系统版本加…

c++ - 第20节 - 异常

1.C语言传统的处理错误的方式 传统的错误处理机制&#xff1a; 1.终止程序&#xff0c;如assert&#xff0c;缺陷&#xff1a;用户难以接受。如发生内存错误&#xff0c;除0错误时就会终止程序。2.返回错误码&#xff0c;缺陷&#xff1a;需要程序员自己去查找对应的错误。如系…

基于神将网络方式进行数据回归拟合实例

前言本篇博客主要以神经网络拟合数据这个简单例子讲起&#xff0c;然后介绍网络的保存与读取&#xff0c;以及快速新建网络的方法。一、神经网络对数据进行拟合import torch from matplotlib import pyplot as plt import torch.nn.functional as F# 自定义一个Net类&#xff0…

Diffusion model(二): 训练推导详解

接上文 Diffusion的训练推导 1. 最小化负对数似然与变分下界 在弄懂diffusion model前向和反向过程之后&#xff0c;最后我们需要了解其训练推导过程&#xff0c;即用什么loss以及为什么。在diffusion的反向过程中&#xff0c;根据(3)(3)(3)式我们需要预测μθ(xt,t),Σθ(x…

【Linux】进程状态和进程优先级

文章目录1. 进程状态2. Linux的进程状态3. 僵尸进程4. 孤儿进程5. 进程优先级1. 进程状态 为了更深入地了解进程&#xff0c;我们需要知道进程的不同状态。 不同的操作系统&#xff0c;对于进程状态有着不同的说法&#xff0c;如&#xff1a;运行、阻塞、挂起、新建、就绪、等…

SIoU Loss

1、论文 题目&#xff1a;《SIoU Loss: More Powerful Learning for Bounding Box Regression》 参考博客&#xff1a; https://blog.csdn.net/qq_56749449/article/details/125753992 2、原理 有关IoU损失函数&#xff0c;像GIoU、DIoU、CIoU都没有考虑真实框与预测框之间的…

关于zookeeper和kafka不得不说的秘密

zookeeper简介1. zookeeper的概述ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a…