Jenkins--自动化构建和部署SpringBoot项目

一、实现目标

通过在Jenkins中创建流水线任务,编写流水线脚本以实现自动化构建和部署SpringBoot项目。流水线脚本主要实现以下几个步骤:

  1. Preparation:从gitee上拉取远程仓库的SpringBoot项目代码。
  2. Build:使用Maven对拉取的代码进行构建出jar包。
  3. Image:再用构建出来的jar包通过docker来制作镜像,并推送到registry私有镜像仓库。
  4. Deploy:从registry私有镜像仓库拉取镜像并在服务器上运行。

二、前期准备

(1)环境准备
需要准备台linux服务器或者虚拟机,用于项目的部署以运行。服务器上还需要提前安装好Maven、Git、JDK等。

(2)Jenkins插件安装
Jenkins要完成自动化构建和部署还需要依赖一些插件来共同完成,可以在插件管理里面搜索需要的插件进行安装,常用到的插件有以下几个:

  • Git:Git插件是必要的,因为它允许Jenkins与Git仓库进行交互,从而实现代码的自动拉取。
  • Maven Integration:用于在Jenkins中建立对Maven项目的支持,它能够识别Maven项目并执行Maven的生命周期命令,如clean, test, package, install等。
  • Publish Over SSH:通过SSH协议将部署文件推送到服务器上。
  • Pipeline: Stage View:通过一个可视化的界面来定义和管理他们的Jenkins流水线。

在这里插入图片描述

三、配置SSH服务器

配置SSH remote hosts的主要目的是允许Jenkins通过SSH连接到远程服务器,并在该服务器上执行命令或脚本。这通常用于在构建或部署过程中执行一些需要在远程服务器上完成的任务,比如运行测试、部署应用程序等。

(1)在Jenkins的主界面左侧点击“系统管理”菜单下的“系统配置”。
在这里插入图片描述
(2)滚动到“Publish over SSH”部分,点击“新增”按钮来添加一个新的SSH服务器配置。在这里插入图片描述
(3)输入SSH服务器配置信息并保存。
在这里插入图片描述

三、全局工具配置

在左侧菜单“系统管理”中选择全局工具配置,进行Maven、Jdk、以及Git相关配置。
在这里插入图片描述

3.1 Maven配置及安装

(1)启动Jenkins容器时挂载到容器中的maven路径为:-v /usr/local/src/maven/apache-maven-3.9.6/:/usr/local/src/maven/。选择文件系统中的settings文件,然后把挂载到容器中的Maven目录下的setting文件的全路径添加到文件路径中。
在这里插入图片描述

(2)在Maven 安装里面,新增Maven,不要勾选自动安装,然后在MAVEN_HOME中配置挂载到容器中的Maven的路径。
在这里插入图片描述

3.2 Jdk安装

由于启动Jenkins容器时会指定容器中默认的jdk运行环境,直接使用默认的jdk环境就好,这里就不做修改。

3.3 Git配置

启动Jenkins容器时会指定容器中默认的git运行环境,这里也直接使用默认的git,不要勾选自动安装。然后在Path to Git executable里面的路径配置容器中具体的git执行文件,可以进入到容器中,通过命令which git来查看具体的git执行文件路径。
在这里插入图片描述
在这里插入图片描述

3.4 环境变量配置

在系统管理-系统配置-全局属性里面找到环境变量,将Maven的环境变量配置上去。
在这里插入图片描述

四、新建任务

在左侧菜单栏中,点击新建任务后跳转到任务创建页面,输入任务名称,选择任务风格后点击确定就能创建对应的任务。
在这里插入图片描述

五、任务配置

在任务配置页面进行任务的相关配置,这里主要是对流水线任务的pipeline脚本进行编写,这个脚本也是任务能否执行成功的关键。脚本内容主要分以下基本:

5.1 拉取代码

(1)使用jenkins自带的脚本生成器来生成拉取代码的语法。
在这里插入图片描述
(2)生成的拉取代码语法复杂到pipeline脚本中。

stage('Preparation') {steps {echo '准备拉取代码'git credentialsId: '1', url: 'https://gitee.com/xxxx/web_demo_freestyle.git'echo '代码拉取成功'}
}

在这里插入图片描述

(3)代码拉取成功后,拉取的代码会存放在jenkins_home目录下的workspace目录中对应的任务名命名的目录中。
在这里插入图片描述

5.2 构建代码
stage('Build') {steps {// 先检查下Maven是否配置好sh "mvn --version"echo '准备构建代码'sh "mvn package -Dmaven.test.skip=true"echo '代码构建成功'}
}

在这里插入图片描述
代码构建成功后会jenkins_home目录下的workspace目录中对应的任务名命名的目录,在该目录中会存放构建项目的源码以及maven构建后生成的jar包,后续制作镜像时都是从workspace目录中对应的任务名命名的目录中去拉取的。
在这里插入图片描述

5.3 制作镜像

(1)在项目的根目录下创建个Dockerfile文件,并编辑内容如下:

FROM openjdk:8
MAINTAINER njh
ADD web_demo_freestyle-0.0.1-SNAPSHOT.jar ~/app.jar
EXPOSE 8088
ENTRYPOINT ["java","-jar","~/app.jar"]

(2)通过流水线语法中的片段生成器来生成上传jar包以及Dockerfile文件到服务器中。此时的工作路径是在workspace目录中对应的任务名命名的目录下。
在这里插入图片描述
在这里插入图片描述

cd /root/jenkins
chmod 777 Dockerfile
docker build -t 127.0.0.1:5005/app:v1 .
docker push 127.0.0.1:5005/app:v1

(4)将生成的语法复制打流水线脚本:
在这里插入图片描述

5.4 部署服务

(1)通过流水线语法生成启动镜像容器的命令。
在这里插入图片描述
(2)将生成的语法复制到流水线脚本中。在这里插入图片描述

五、执行任务

(1)点击任务右侧的执行按钮开始执行这个任务,在构建历史中可以看到正在执行的任务。
在这里插入图片描述

(2)点击正在执行的任务编号,到任务信息页面,点击控制台输出就可以看到任务执行的日志信息。
在这里插入图片描述
(3)任务执行完成后,可以在日志中看到BUILD SUCCESS

在这里插入图片描述
(4)流水线任务执行完成后,查看服务器上项目是否正常运行。
在这里插入图片描述

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

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

相关文章

部署JVS服务出现上传文件不可用,问题原因排查。

事情的起因是这样的,部门经理让我部署一下JVS资源共享框架,项目的地址是在这里 项目资源地址 各位小伙伴们做好了,我要开始发车了,全新的“裂开之旅” 简单展示一下如何部署JVS文档 直达链接 撕裂要开始了 本来服务启动的好好…

链式二叉树的基本操作1

1.概念回顾 讲二叉树的基本操作之前,我们回顾一下二叉树的概念 在讲树之前,我们的每讲一种数据结构,无外乎就是在讲它们的增删查改,但是在树这里,就有了不小变化。 2.结点的定义 既然是链式二叉树,那必须…

奇安信网络安全实习一面

自我介绍数据库的几种防御方式,无回显怎么办?防御最有效的方式,预编译的原理?应急的经验(在之前实习公司)redis未授权怎么getshellmysql怎么获取shell做过代码审计嘛?java721没有链怎么办&#…

在线企业机构不可错过的开源知识付费平台!免费试用!,免费网上教学平台有哪些?怎么选择?

在线教育平台可谓如雨后春笋般,一个接一个的诞生。当然,对于学员来说,找在线教学平台首先是找对自己有用的,再者就是免费平台。其实在线教学平台免费的也有,不过不是每个课程都免费。这里我们一起来看看免费的在线教育…

部署 Sentinel 控制台:实现流量管理和监控

序言 Sentinel 是阿里巴巴开源的一款流量防护与监控平台,它可以帮助开发者有效地管理微服务的流量,实现流量控制、熔断降级、系统负载保护等功能。本文将介绍如何在项目中部署和配置 Sentinel 控制台,实现微服务的流量防护和监控。 一、Sen…

机器学习_如何给客户做聚类K-Means

文章目录 前言K-Means 的工作原理总结K-Means的实战 前言 在工作中遇见咱们给客户做下聚类,划分下客群,这里分成3类(也可根据需求分成6类)。根据现有的字段,将数值分成层级(已处理好的数据)&am…

深入理解Linux中TCP/IP协议栈的实现原理与具体过程

一、Linux内核与网络体系结构 在我们了解整个linux系统的网络体系结构之前,我们需要对整个网络体系调用,初始化和交互的位置,同时也是Linux操作系统中最为关键的一部分代码-------内核,有一个初步的认知。 1、Linux内核的结构 …

智能改写文章怎么做,3个方法让你轻松改出高质量文章

在如今的自媒体兴盛时代,内容创作对于自媒体人来说是必不可少的一项工作,然而,如何在保持内容原创性的前提下迅速生成高质量的文章变得尤为重要。智能改写文章的出现,为所有的自媒体人带来了一种全新的思路,它让大家在…

2024付费进群系统,源码及搭建变现视频课程(教程+源码)

前三节讲解搭建支付对接,后两节讲解一些引流变现的方法,还有一种变现就是帮人搭建这样的平台,因为全网都没有一套完整的视频教怎么搭建的,有也只是文字教程,一般新人根本看不懂,我视频实操演示,…

16-LINUX--线程安全

一。线程安全 线程安全即就是在多线程运行的时候,不论线程的调度顺序怎样,最终的结果都是 一样的、正确的。那么就说这些线程是安全的。 要保证线程安全需要做到: 1) 对线程同步,保证同一时刻只有一个线程访问临界资…

Java Excel操作

Apache POI是一个用于读写Microsoft Office文件格式的Java库&#xff0c;可以用来读取或写入Excel文件。 使用步骤 1.导入坐标 <!--alibaba-fastjson--> <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId>…

minio安装部署

MinIO 介绍 MinIO是一个对象存储解决方案&#xff0c;它提供了与Amazon Web Services S3兼容的API&#xff0c;并支持所有核心S3功能。 MinIO有能力在任何地方部署 - 公有云或私有云&#xff0c;裸金属基础设施&#xff0c;编排环境&#xff0c;以及边缘基础设施。 MinIO 安装…

【网络基础2】深入理解TCP协议:协议段、可靠性、各种机制

文章目录 1. TCP协议段格式1.1. 如何解包 / 向上交付1.1.1. 交付1.1.2. 解包 1.2. 如何理解可靠性1.2.1. 确认应答机制&#xff08;ACK&#xff09;1.2.2. 序号 与 确认序号 2. TCP做到全双工的原因2.1. 16位窗口大小2.2. 6个标记位 3. 如何理解连接3.1 连接管理机制3.1.1. 三次…

独孤思维:赚美金,新项目正式发布

独孤四年前开始日更写作以前&#xff0c;还做过海外赚美金项目。 当时图便宜&#xff0c;报名了国外联盟-海外问卷这个赛道。 授课老师&#xff0c;给了我一个信息表&#xff0c;让我搞了100个guge账号。 开始矩阵注册各站点&#xff0c;矩阵生成油管人身份信息。 第一阶…

安卓手机APP开发__输入事件的概述

安卓手机APP开发__输入事件的概述 目录 处理用户交互 事件监听器 onClick() onLongClick() onFocusChange() onKey() onTouch() onCreateContextMenu() 事件处理器 触摸的模式 处理焦点 处理用户交互 在安卓上,在你的应用程序上从用户的交互中发出的事件被拦截的…

VUE 继承ali-oss把我整哭了,求助帖

问题&#xff1a; npm install ali-oss 后&#xff0c; const OSS require(‘ali-oss’) // import OSS from ‘ali-oss’; 导入直接报错&#xff1a; {message: “Cannot read properties of undefined (reading ‘prototype’)”, name: “TypeError”, stack: "at 324…

Web安全研究(九)

知识星球 首先推荐一下我们的知识星球,以AI与安全结合作为主题,包括AI在安全上的应用和AI本身的安全; 加入星球你将获得: 【Ai4sec】:以数据驱动增强安全水位,涵盖内容包括:恶意软件分析,软件安全,AI安全,数据安全,系统安全,流量分析,防爬,验证码等安全方向。…

Leetcode 226:翻转二叉树

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 思路&#xff1a;使用递归 //使用前序遍历翻转树public static TreeNode invertTree(TreeNode root){if(rootnull) return root;swap(root);invertTree(root.left);invertTree(root.rig…

API设计之争:一个接口一个职能还是一个页面所需字段?

在软件开发中&#xff0c;设计API接口是一个重要而且复杂的任务。在设计API接口时&#xff0c;一个常见的问题是&#xff0c;是按照每个接口的职能来设计&#xff0c;还是按照每个页面所需的字段来设计&#xff1f; 本文将对这两种设计方法进行比较&#xff0c;并探讨它们的优…

IP地址证书的详细申请步骤

IP地址证书申请的条件有两个&#xff0c;一个是此IP必须是公网IP&#xff0c;另一个是IP的80和443端口必须允许短暂开放。满足这两个条件才能为其部署SSL证书。 IP地址ssl证书申请网址链接https://www.joyssl.com/certificate/select/ip_certificate.html?nid16 1 访问提供IP…