从零实现DevOps(四):Jenkins+GitLab自动化部署SpringBoot项目(Jenkins本地环境+Jar包模式)

2023-11-17

从前三篇文章中,我们已经实现了gitlab、jenkins项目的安装与基础配置,并且给Centos7操作系统搭配了jdk、maven等环境变量。从这边文章起,“从零实现DevOps”系列,将正式开始利用Jenkins+Gitlab的完美结合,一步步实现全栈项目的持续集成和持续部署(CI/CD),以后也会引入Docker+Dockerfile+docker-compose的方式去实现快速部署。那么,第一篇文章先传统的SpringBoot项目开刀,在Jenkins本地环境中用jar包的方式简单实现一下,开始吧!!!

一、Jenkins插件和全局环境配置

1、Jenkins设置中文(部分版本不生效,跳过此步骤也可以)

  1. 点击Jenkins首页中的Manage Jenkins,进入系统设置

  2. 点击Plugins,进入插件中心
    在这里插入图片描述

  3. 选择Available Plugins,搜索Locale,勾选后,点击Install without restart(安装无需重启)
    在这里插入图片描述

  4. 等待安装完毕后返回首页
    在这里插入图片描述

  5. 再次点击Manage Jenkins,点击System,进入系统配置

  6. 往下拉,找到Locale,输入框中输入“zh_CN”,勾选下边的按钮(忽略浏览器首选项并向所有用户强制使用此语言),点击保存返回首页 在这里插入图片描述

  7. 地址栏后边加上“/restart”后刷新网址,重启Jenkins 在这里插入图片描述在这里插入图片描述

  8. 等待重启后成功

2、Jenkins安装Maven、GitLab等插件

  1. 与安装中文插件同理,依次搜索安装MavenGitLab插件 在这里插入图片描述
    在这里插入图片描述
  2. 为了万无一失,全部安装后,再次重启一下Jenkins

3、配置GitLab系统凭据

可能是因为版本问题,我点击系统级的Credentials时,并没有添加凭据的地方,所以,我选择在添加Gitlab地址的地方添加令牌

  1. 点击Manage Jenkins,点击System,进入系统配置
  2. 往下拉,找到GitLab,其他不需要填写,点击添加,再点击弹出的Jenkins图标 ,进行配置凭据 在这里插入图片描述
  3. 配置Credentials(ID和描述可填可不填,知道即可),点击添加即可,返回首页(弹框点击
    Username with password
    最简单的凭证类型,字面理解即可掌握精髓,就是保存用户名和密码。 在这里插入图片描述
  4. 返回首页,在系统的Credentials中,查看配置的凭据 在这里插入图片描述
  5. 红框的就是你刚才添加的凭据,还可以点进去进行修改账号密码操作 在这里插入图片描述
    点击Change Password可以修改密码 在这里插入图片描述

4、配置Maven环境变量

  1. 点击Manage Jenkins,点击Tools(有些版本的jenkins也叫Global Config),进入工具配置
  2. 往下拉找到Maven,点击新增Maven
  3. 取消勾选Install automatically,用我们自己的Maven版本 在这里插入图片描述
  4. 新增Maven内容,Name随便取,MAVEN_HOME用的是自己配置的maven路径(mvn -v在这里插入图片描述
    在这里插入图片描述
    点击保存返回首页!!!

二、创建并配置Jenkin流水线(重点来了)

1、创建Job

  1. 点击左侧新建ItemCreate a job,创建一个流水线 在这里插入图片描述
  2. 输入任务名称,选择第一个“Freestype project”,点击确定即可
    在这里插入图片描述

2、源码管理(配置Gitlab地址和分支)

  1. 进入Gitlab,找到自己的项目,复制你的项目git地址
    在这里插入图片描述

  2. 配置页面,往下拉,找到源码管理,将git地址复制进Repository URL,并选择Credentials(在一.3中配置的,也可以在这里添加并选择) 在这里插入图片描述

  3. 文中提示报错“Failed to connect to repository : Error performing git command: git ls-remote -h http://192.168.1.11/root/test_project.git HEAD”,是因为服务器未安装git导致,yum安装一下

    yum install git
    

在这里插入图片描述
4. 安装成功后,再次把git地址粘贴进Repository URL,就不会出现刚才的错误了
在这里插入图片描述
5. 继续往下拉,在“指定分支”处,配置你想要自动部署的分支
在这里插入图片描述
觉得手欠的可以先应用一下,再继续进行,防止误关闭页面!!!

3、构建触发器(配置GitLab的Webhooks)

  1. 继续往下拉页面,找到“构建触发器”,勾选“Build when a change is pushed to GitLab

在这里插入图片描述
触发策略由自己决定

- Push Events:提交Push代码触发
- Opened Merge Request Events:合并分支触发
  1. 配置GitLab的Webhooks,搭建钩子,触发部署事件(重中之重)

  2. 打开Gitlab需要部署的项目,左侧点击设置,然后点击Webhooks
    在这里插入图片描述

  3. Webhooks中:URL是“Build when a change is pushed to GitLab”后边的那个地址,粘贴进去
    在这里插入图片描述
    在这里插入图片描述

  4. 回到jenkins,往下拉,点击高级,找到“Secret token”,点击“Generate”,生成令牌,并把这个令牌粘贴进Gitlab-Webhooks的“Secret 令牌”中
    在这里插入图片描述
    在这里插入图片描述

  5. 在Webhoos配置中,勾选推送事件合并请求事件,并点击“添加webhooks

    推送事件中,你可以配置所有分支或者指定的分支,一般来说,部署哪个分支选择哪个即可

    所以,我选择的“通配符样式”,并指定的“dev”分支(dev
    在这里插入图片描述

  6. 点击保存时,Gitlab有可能会报错“Url is blocked: Requests to the local network are not allowed”,这是因为你没有开启Webhooks的出站请求!

解决方法:
(1)进入管理员设置
在这里插入图片描述(2)点击设置,进入网络设置

(3)找到出站请求,点击展开,勾选“允许来自 webhooks 和集成对本地网络的请求”,保存更改即可
在这里插入图片描述

(4)重新配置webhook,即可成功。成功效果如图:
在这里插入图片描述
再次提醒,Jenkins最好点击一次应用,防止丢失!!!

小贴士

其实,在此步骤完成后,你可以将jenkins保存一下,回到首页。并且在刚才配置的Gitlab-webhooks中,点击测试的推送事件,尝试一下,项目能不能成功打包!!!

在这里插入图片描述
回到Jenkins,可以发现已经成功构建一次
在这里插入图片描述
然后去你服务器的“/root/.jenkins/workspace”中,去看看有没有项目代码,target文件夹中有没有jar包~~~
在这里插入图片描述
可以发现,我的Gitlab项目已经上传成功,并且打包成功!!!
如果你有兴趣,也可以看看构建的控制台输出,里边也有打包的输入内容,神奇吧~~~
在这里插入图片描述
在这里插入图片描述

4、构建环境(Build)

勾选“Add timestamps to the Console Output”,方便打印控制台日志!!!
在这里插入图片描述

5、Build Steps(Maven打包项目)

  1. 点击增加构建步骤,选择“Invoke top-level Maven targets

  2. Maven版本选择在一、4中配置的maven版本,“目标”是我们打包命令

    clean package -Dmaven.test.skip=true -U
    

在这里插入图片描述

6、增加构建步骤(杀死已有进程+启动jar包)

  1. 编写jar包启动脚本
cd /data/java

touch start.sh

vim start.sh

脚本内容如下,需要根据个人情况改三个地方

第4行:Java环境变量配置位置(一般是:source /etc/profile)

第6行:jar包位置

第8行:jar包名称

#!/bin/bash
#cp /dev/null /nohup.out
# 重新加载环境变量
source ~/.bash_profile
# 跳转到Jar地址
cd /data/java
# 设置Jar包名称变量
APP_NAME=jimapaotui-2.0.jar
# 杀死原有进程号
ID=`ps -ef | grep $APP_NAME | awk '{print $2}'`
echo "------start---------"
for id in $ID
do
        kill -9 $id
        echo "killed $id"
done
# 防止杀死进程
BUILD_ID=dontKillMe
# 启动Jar包
nohup java -jar $APP_NAME > nohup.out 2>&1 &
echo "------end---------"

为start.sh增加执行权限

sudo chmod +x start.sh

在这里插入图片描述

  1. 点击“增加构建步骤”。选择”Execute shell”,并添加如下的命令
#!/bin/bash
# 复制jar包到脚本中指定的位置
cp ./target/jimapaotui-2.0.jar /data/java
# 执行启动脚本
sh /data/java/start.sh

如图:
在这里插入图片描述
至此,流水线配置已全部完毕,接下来,进行测试流程!!!

四、测试功能

从刚才指定的dev分支提交一次代码
在这里插入图片描述
Jenkin已经开始构建了
在这里插入图片描述
构建成功
在这里插入图片描述
去服务器上看看jar包是否上传,是否执行成功

cd /data/java
ps -ef | grep **.jar

在这里插入图片描述

五、总结

至此,Jenkins结合GitLab实现本地代码自动化部署的功能已经实现,下一期我们会实现远程服务器部署Jar包项目的实例!!!

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

从零实现DevOps(四):Jenkins+GitLab自动化部署SpringBoot项目(Jenkins本地环境+Jar包模式) 的相关文章

  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • 如何默认将 Maven 插件附加到阶段?

    我有一个 Maven 插件应该在编译阶段运行 所以在项目中consumes我的插件 我必须做这样的事情
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 使用 Android 发送 HTTP Post 请求

    我一直在尝试从 SO 和其他网站上的大量示例中学习 但我无法弄清楚为什么我编写的示例不起作用 我正在构建一个小型概念验证应用程序 它可以识别语音并将其 文本 作为 POST 请求发送到 node js 服务器 我已确认语音识别有效 并且服务
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • Java Integer CompareTo() - 为什么使用比较与减法?

    我发现java lang Integer实施compareTo方法如下 public int compareTo Integer anotherInteger int thisVal this value int anotherVal an
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • etcd 集群搭建及常用场景分析

    概述 etcd 是一个分布式一致性k v存储系统 可用于服务注册发现与共享配置 具有以下优点 简单 相比于晦涩难懂的paxos算法 etcd基于相对简单且易实现的raft算法实现一致性 并通过gRPC提供接口调用 安全 支持TLS通信 并可
  • 项目import其他class类失败,解决办法:清楚缓存

    如题 今天导入新的项目的时候遇到一些问题 这里记录一下 1 问题 所有的类都是 java文件而不是 class pom文件全部报错 maven 加载不进来 解决 一阵排查发现是加载项目的包目录加载错了 在最外层打开的导致找不到下级的目录 2
  • Too many open files的四种解决办法【转】

    摘要 Too many open files有四种可能 一 单个进程打开文件句柄数过多 二 操作系统打开的文件句柄数过多 三 systemd对该进程进行了限制 四 inotify达到上限 领导见了孔乙己 也每每这样问他 引人发笑 孔乙己自己
  • opencv-光流法

    import numpy as np import cv2 import sys cap cv2 VideoCapture video2 mp4 feature params dict maxCorners 100 qualityLevel
  • matlab实现三自由度机械臂旋转

    matlab实现三自由度的机械臂旋转 1 内容与要求 根据表一机械臂长度 以及图一机械臂配置为机械臂开发一个控制器 使其能够执行特定的任务 更具体地说 让机械臂的末端执行器移动到特定的点 项目要求 你的控制器应该能够控制一个3 自由度的机械
  • 《消息队列高手课》缓存策略:如何使用缓存来减少磁盘IO?

    现代的消息队列 都使用磁盘文件来存储消息 因为磁盘是一个持久化的存储 即使服务器掉电也不会丢失数据 绝大多数用于生产系统的服务器 都会使用多块儿磁盘组成磁盘阵列 这样不仅服务器掉电不会丢失数据 即使其中的一块儿磁盘发生故障 也可以把数据从其
  • 解决 windows 下浏览器无法上网,QQ/微信正常上网

    解决 windows 下浏览器无法上网 QQ 微信正常上网 解决 windows 下浏览器无法解析DNS配置 gt 注意 本处只 提供一种解决思路 并不代表所有问题都能被解决 可以尝试一下 这种问题 一般在浏览器中会 直奔主题 原因 1 查
  • 计算机视觉(十二):Mask R-CNN

    1 引言 Mask R CNN是在Faster R CNN架构为基础上改进的一种目标检测架构 并且能够有效的完成高质量的语义分割 Mask R CNN主要结构如下图所示 那我们就来一步步介绍Mask R CNN的部分 2 特征提取方法 通过
  • aps是什么意思_aps是什么意思

    aps的意思是 1 美国物理学会 全称 American Physical Society 2 人名 短语 APS Assembly空气加压系统 APS Automated Packaging Systems自动封装系统 例句 1 I re
  • win10环境下PCL安装和配置回顾(一)

    2020年博主有写过几篇关于PCL的博客 这边想先回顾下 再增加点新内容 之前写的博客专栏如下链接 https blog csdn net jiugeshao category 11993239 html spm 1001 2014 300
  • 基于FPGA的频率计设计

    文章目录 写在前面 1 什么是频率计 2 测量方法与基本原理 3 待测信号如何输入FPGA 一 实验程序 1 RTL图 2 Verilog 参考设计 3 指派引脚 二 调试验证 输入不同频率的方波 写在前面 1 什么是频率计 频率计是一种专
  • 正则表达式用ajax怎么写,使用AJAX(包含正则表达式)验证用户登录的步骤

    我们来分一下步骤吧 1 HTML代码 页面先写出来 2 正则表达式验证输入的用户名密码是否正确 失去焦点验证 3 Ajax异步提交 4 servlet这是后台处理代码获取数据并对比响应 然后跳转成功页面 效果图 结构 代码如下 table
  • TensorFlow 的基本概念和使用场景

    TensorFlow 是一个热门的机器学习框架 由 Google 开发 用于构建和训练神经网络和其他机器学习模型 下面是 TensorFlow 的基本概念和使用场景 基本概念 1 张量 Tensor 是 TensorFlow 中的基本数据结
  • 防止运营商劫持apk

    title 防止运营商劫持apk tags https upyun apk 运营商 劫持 categories 工作日志 date 2017 05 25 18 18 56 目前f6部分系统使用了upyun的服务 包含apk的下载和静态资源等
  • Exception常见异常类型和处理机制

    Exception 意外异常 异常层次结构的父类 Throwable 是异常Exception与Error的父类 直接继承自Object Error通常指系统发生的严重性的错误 不能通过程序代码解决的问题 Exception异常可以通过修改
  • 在ipad任意界面都可以写字_不再泡面!大学生如何用iPad高效学习

    如果你还是一个学生 相信平时上课记笔记一定是最头疼的问题 平时的笔记期末就不见了等等 用电子的方式记录就可以完美解决这个问题 而目前比较推崇 流行的方式就是使用iPad Apple Pencil的组合 书写的感觉也接近纸质 但同样的 你也需
  • 多层嵌套的 javabean转化为xml时 更改嵌套的属性名称时 报错重复

    我们先来看下报错 如果需要给多层嵌套javabean 转化为xml时 转化的标签名字不符 我们需要该怎么做呢 不是多层嵌套的我们可以直接使用 XmlElement name 来进行别名 如果多层的话 我们则需要给在每个路过的类上都需要加上
  • 公众号H5开发如何在本地调试

    1 设置本地hosts的地址映射 如blog test com映射127 0 0 1 方法 修改hosts的地址映射 使域名解析到指定IP 2 配置公众号网页授权获取用户基本信息 3 修改vue配置 vue cli3创建的项目 在项目根目录
  • 【PLC 课程设计】花式喷泉

    花式喷泉的控制 要求 按下启动按钮 喷泉装置开始工作 按下停止按钮 喷泉装置停止工作 喷泉的工作方式由花式选择开关和单步 连续开关决定 当单步 连续开关在单步位置时 喷泉只能按照花样选择开关设定的方式运行一个循环 花样选择开关用于选择喷泉的
  • 从零实现DevOps(四):Jenkins+GitLab自动化部署SpringBoot项目(Jenkins本地环境+Jar包模式)

    从前三篇文章中 我们已经实现了gitlab jenkins项目的安装与基础配置 并且给Centos7操作系统搭配了jdk maven等环境变量 从这边文章起 从零实现DevOps 系列 将正式开始利用Jenkins Gitlab的完美结合