保姆级教程,Linux服务器docker搭建jenkins持续集成一键部署SpringBoot项目(Gradle)

news2024/9/24 5:22:30

前言:

在后台项目开发过程从Java延伸到Kotlin开发,从maven pom到gradle,IDEA新项目SpringBoot init框架官方推荐kotlin+gradle,本章以此为jenkins持续集成做项目部署,服务器为Centos,JDK 17,SpringBoot 3.1.1(JDK 17以下无法运行SpringBoot 3.x)

1.docker安装

docker安装见docker安装教程

2.jenkins安装

在第一步安装完成Docker后,进行以下操作:

2.1 搜索jenkins镜像

[root@VM-0-14-centos /]# docker search jenkins搜索Jenkins镜像

2.2 拉取镜像

[root@VM-0-14-centos /]# docker pull jenkins/jenkins拉取镜像

查看本地是否有刚拉取的jenkins镜像
[root@VM-0-14-centos /]# docker images
image.png

2.3 运行jenkins容器

2.3.1 创建挂载目录并赋予权限

jenkins_home工作目录
[root@VM-0-14-centos /]# mkdir -p docker/jenkins_home && chown -R 1000 /docker/jenkins_home

2.3.2 运行jenkins容器并挂载目录

[root@VM-0-14-centos docker]# docker run -itd --name jenkins -p 8888:8080 -p 50000:50000 --privileged=true -v /usr/bin/docker:/usr/bin/docker -v /docker/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins
参数详情:
-i:交互式操作
-t:终端
-d:容器后台运行
–name:容器名称
-p:端口映射,将本地8888端口映射到容器内部8080端口,将本地50000端口映射到容器内50000端口,8080端口:jenkins服务器对外URL地址,50000端口:slave节点与jenkins的通讯端口
–privileged=true:赋予容器root权限,便于进入容器
-v:工作目录挂载
此处挂载了三个目录,分别是宿主机的docker及docker套接字,用于在jenkins容器中可以调用宿主机的docker命令,后续可以在jenkins容器中执行已构建好的jar的替换和restart等操作;然后就是jenkins工作目录
结尾的jenkins/jenkins代表镜像名称,也就是上一步骤中拉取的jenkins镜像

2.3.3查看容器运行状态

[root@VM-0-14-centos /]# docker ps
docker容器运行状态

3 配置jenkins

打开浏览器输入http://{server_ip}:8888访问jenkins网页,server_ip为你的服务器ip,本地部署的话,本地ip访问即可
注意:如果是云服务器部署,映射的端口需要外部访问的话,需开启云服务器的对应端口
jenkins主页

查看jenkins密码


1.查看jenkins的容器id
[root@VM-0-14-centos /]# docker ps
jenkins容器id


2.查看jenkins容器日志
[root@VM-0-14-centos /]# docker logs ee68ac1d13c6
jenkins密码
通过日志查看就能获取到jenkins的初始密码了,使用此密码登录jenkins网页即可

3.1 安装推荐的插件

推荐的插件

3.2 根据引导完成初始化即可

image.png
如果点击保存并完成卡住的话,刷新一下浏览器,再填一遍信息,再保存即可!

3.3 开启代理兼容

主页->Manage Jenkins->Security->跨站请求伪造保护
启用代理兼容

3.4 配置JDK

1.进入Jenkins容器(container_id通过docker ps命令查看)
[root@VM-0-14-centos /]# docker exec -it -u root {container_id} /bin/bash
2.进入var目录
root@ee68ac1d13c6:/# cd var
3.下载JDK 17
root@ee68ac1d13c6:/var# wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
4.解压JDK文件
root@ee68ac1d13c6:/var# tar -xvf jdk-17_linux-x64_bin.tar.gz

配置JDK路径,主页->Manage Jenkins->Tools->JDK 安装
JDK配置

3.5 配置Gradle

因为项目框架是SpringBoot+Kotlin+Gradle,故需与项目一致的Gradle版本来构建任务
主页->Manage Jenkins->Tools->Gradle
image.png

4.创建jenkins任务

4.1 创建任务

创建任务
创建任务

4.2 任务配置

4.2.1 进入任务配置

配置

4.2.2 配置git源码,代码推送到git(这里以Gitee(码云)为例)

这里示例demo项目是在本地创建的一个初始SpringBoot项目(SpringBoot+Kotlin+Gradle),然后代码推到gitee
gitee配置
Gitee凭证配置
Gitee凭证配置
gitee配置

4.2.3 配置构建

配置JDK(构建所需的JDK)
配置JDK

配置构建步骤(Build Steps)
Build Steps
Build Steps

5.构建任务

1.进入任务主页,点击立即构建,然后在下方可以查看构建进度,点击进度可以查看构建详情
2.初次构建,会拉取git源码到工作空间,后续的构建只是更新git代码
3.初次构建的时长比较久(几分钟到十几分钟不等),因为要拉取项目的各种三方包来进行构建,后续构建就非常迅速
构建任务
构建成功


构建成功后可以在工作空间中查看构建完成的jar包

工作空间

6.项目镜像制作

在jenkins容器的工作目录下的项目内创建镜像制作文件Dockerfile
root@ee68ac1d13c6:/# cd /var/jenkins_home/workspace/demo
root@ee68ac1d13c6:/var/jenkins_home/workspace/demo# vim Dockerfile

PS:docker build构建Dockerfile镜像时的上下文仅限Dockerfile所在目录,故需要把Dockerfile文件放置在jenkins容器的根目录或者jenkins工作空间的项目目录内

Dockerfile

# 基础镜像
FROM openjdk:17
# 拷贝已构建好的项目jar到容器目录下,此时的Dockerfile文件在jenkins工作空间的项目目录下
COPY ./build/libs/demo-0.0.1-SNAPSHOT.jar /app.jar
# 执行命令启动jar
ENTRYPOINT ["java","-Xms256m","-Xmx512m","-jar","app.jar"]
# 时区
ENV TZ="Asia/Shanghai"

构建镜像(注意命令结尾有个点)
root@ee68ac1d13c6:/var/demo# docker build -t demo .
参数详情:
-t: 镜像名称
.: 表示Dockerfile文件在当前目录,也可以写绝对路径

镜像构建成功

查看已构建完成的镜像
root@ee68ac1d13c6:/var/jenkins_home/workspace/demo# docker images
镜像列表
运行镜像(因为我们的jenkins容器挂载了宿主机的docker和docker.sock套接字,所以在jenkins容器中运行docker命令和宿主机运行是一样的)
root@ee68ac1d13c6:/var/jenkins_home/workspace/demo# docker run -itd --name demo -p 8000:8080 demo
参数详情:
-i: 交互式操作
-t: 终端
-d: 设置容器在在后台一直运行
-p 8000:8080 端口进行映射,将本地 8000 端口映射到容器内部的 8080 端口(SpringBoot项目默认8080端口,如果项目自定义了端口,就需要更改这里的映射端口)
结尾的demo: 镜像名称


查看容器是否成功运行
root@ee68ac1d13c6:/var/jenkins_home/workspace/demo# docker ps
容器运行状态

浏览器访问 http://{server_ip}:8000/demo
地址后面的demo为demo项目中的测试controller接口
DemoController


访问结果

7.Jenkins持续集成

以上步骤基本完成jenkins的项目部署步骤,但只是初步部署,如果需要自动化流程,那就需要增加后续的构建步骤。
上述流程在完成项目构建后,还需要手动构建镜像、手动启动容器,一旦涉及代码变更后,构建后的手动操作步骤还需要走一遍,这个时候就需要将构建后的后续手动操作转换为自动化,真正实现一键构建及部署更新操作。

上述步骤已经完成了对项目镜像的制作,现在这里可以执行命令将构建好的jar 复制到容器内,再重启容器即可完成部署更新

增加构建步骤,项目主页->配置->Build Steps->增加构建步骤->执行 shell
增加构建步骤


填入shell命令(请不要将注释也一起填进去了)

# 将构建好的jar复制到容器内,更名为app.jar demo为容器别名,也可以使用容器id
docker cp /var/jenkins_home/workspace/demo/build/libs/demo-0.0.1-SNAPSHOT.jar demo:/app.jar
# 重启项目容器
docker restart demo

Shell 命令

验证

修改项目源码(修改后记得推代码QAQ)
修改项目代码


jenkins构建

构建项目
构建结果


验证修改结果,浏览器刷新看看数据是否发生变化 浏览器访问

验证成功,修改的代码已成功更新


jenkins持续集成已大功告成!!!

标签:CentOs、docker、jenkins、SpringBoot、Kotlin、Gradle、JDK17、shell

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

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

相关文章

各种运算符

算术运算符 1.双目运算符 */%:从左到右优先级依次降低 一些注意事项: 1若a/b都为整型那么结果也为整型,如果ab其中有一个为实型,结果则为实型 求余运算符注意事项: 1运算对象必须为整数 2运算结果的整数跟左边数字的…

Go项目实现日志按时间及文件大小切割并压缩

关于日志的一些问题: 单个文件过大会影响写入效率,所以会做拆分,但是到多大拆分? 最多保留几个日志文件?最多保留多少天,要不要做压缩处理? 一般都使用 lumberjack[1]这个库完成上述这些操作 lumberjack //info文件wr…

linux用户密码存放在哪个文件

linux用户密码存放在“/etc/shadow”文件中。“/etc/shadow”文件又称为“影子文件”,用于存储Linux系统中用户的密码信息;该文件只有root用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。 本教程操作环境&am…

IOS看书最终选择|源阅读转换|开源阅读|IOS自签

环境:IOS想使用 换源阅读 问题:换新手机,源阅读下架后,没有好的APP阅读小说 解决办法:自签APP 转换源仓库书源 最终预览 :https://rc.real9.cn/ 背景:自从我换了新iPhone手机,就无法…

iOS 搭建组件化私有库

一、创建私有库索引 步骤1是在没有索引库的情况下或者是新增索引的时候才需要用到(创建基础组件库) 首先在码云上建立一个私有库索引,起名为SYComponentSpec 二、本地添加私有库索引 添加私有库索引 pod repo add SYComponentSpec https:/…

fiddler 手机抓包(含https) 完整流程

第一部分:下载并安装fiddler 一.使用任一浏览器搜索【fiddler下载安装】,并下载fiddler 安装包。 二.fiddler安装包下载成功后,将下载的fiddler压缩包解压到自定义文件夹【fiddler】或者解压到当前文件夹下,双击文件夹中的【fidd…

工作记录------单元测试(持续更新)

工作记录------单元测试 之前的工作中从来没有写过单元测试&#xff0c;新入职公司要求写单元测试&#xff0c; 个人觉得&#xff0c;作为程序员单元测试还是必须会写的 于此记录一下首次编写单元测试的过程。 首先引入单元测试相关的依赖 <dependency><groupId>…

二、数据结构7:KMP 模板题+算法模板(KMP字符串)

文章目录 算法模板KMP题目模板 模板题KMP字符串原题链接题目思路题解 算法模板 KMP题目模板 // s[]是长文本&#xff0c;p[]是模式串&#xff0c;n是s的长度&#xff0c;m是p的长度 求模式串的Next数组&#xff1a; for (int i 2, j 0; i < m; i ) {while (j &&…

Kafka3.0.0版本——Broker(Zookeeper服务端存储的Kafka相关信息)

目录 一、启动zookeeper集群及kafka集群服务启动1.1、先启动三台zookeeper集群服务&#xff0c;再启动三台kafka集群服务1.2、使用PrettyZoo连接zookeeper客户端工具 二、在zookeeper服务端存储的Kafka相关信息 一、启动zookeeper集群及kafka集群服务启动 1.1、先启动三台zook…

一篇文章带你彻底搞懂方法重写(override)和重载(overload)—菜鸟教程学习记录

一篇文章带你彻底搞懂方法重写(override)和重载(overload) ​ 这个其实我们在之前的java方法那一章节里面就提到了&#xff0c;这里更加深入一下&#xff0c;并且提供具体的例子。 重写(Override)基本概念&#xff1a; ​ Java方法**重写(Override)**指的是&#xff0c;子类…

02 笔记本电脑m.2硬盘更换

1 工具展示 SN570的2T硬盘。够用了。 对于这台华为&#xff0c;使用的螺丝刀批头是4或5毫米的六边形批头。如果出现打滑的情况&#xff0c;请不要用蛮力哦。 2 更换过程 使用螺丝刀拧走后盖的螺丝&#xff08;为了避免会出问题要再次打开&#xff0c;我到现在还没有把螺丝拧回…

groovy.lang.GroovyRuntimeException:Ambiguous method

目录 问题 根因及解决 问题 今天线上的计算脚本报了个问题&#xff0c;报警如下是 groovy 运行时异常。调用方法 org.springframework.util.CollectionUtils#isEmpty 出现了异常。异常原因是由于方法重载造成了歧义。无法确定如何调用方法 [null]&#xff0c;因为它同时匹配了…

如何隐藏开源流媒体EasyPlayer.js视频H.265播放器的实时录像按钮?

目前我们TSINGSEE青犀视频所有的视频监控平台&#xff0c;集成的都是EasyPlayer.js版播放器&#xff0c;它属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;包括WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#x…

Stable diffusion 三大基础脚本 提示词矩阵,载入提示词,XYZ图表讲解

目录 0.本章讲解 1.提示词矩阵(prompt matrix) 1.2.提示词矩阵功能选项 1.2.1.把可变部分放在提示词文本的开头 1.2.2.为每张图片使用不同随机种子 1.2.3.选择提示词 1.2.4.选择分割符 1.2.5.宫格图边框&#xff08;像素&#xff09; 2.从文本框或文件载入提示词(Pro…

0基础学习VR全景平台篇 第75篇:多现场

多现场是指将多台设备的直播画面整合到一个直播活动链接里面&#xff0c;让用户自行选择切换要看哪个直播画面的功能。既可以是同一个活动的不同角度直播&#xff0c;也可以是异地的直播。多现场不需要导播台&#xff0c;并且可以同时支持平面直播和VR直播的混合切换。多现场仅…

excel中使地址按十六进制进行数值递增的函数

这里是尼德兰的喵工具相关文章&#xff0c;欢迎您的访问&#xff01; 如果文章对您有所帮助&#xff0c;期待您的点赞收藏&#xff01; 让我们一起为成为芯片前端全栈工程师而努力&#xff01; 在进行寄存器编写时很多时候会涉及到算地址的问题&#xff0c;通常32bit位宽的寄存…

Gin框架使用

Gin Gin框架安装与使用 下载安装Gin&#xff1a; go get -u github.com/gin-gonic/gin使用示例&#xff1a; package mainimport "github.com/gin-gonic/gin"func main() {//创建一个默认的路由引擎r : gin.Default()//GET:请求方式&#xff0c;/hello:请求路径/…

Vivado进行自定义IP封装

一. 简介 本篇文章将介绍如何使用Vivado来对上篇文章(FPGA驱动SPI屏幕)中的代码进行一个IP封装&#xff0c;Vivado自带的IP核应该都使用过&#xff0c;非常方便。 这里将其封装成IP核的目的主要是为了后续项目的调用&#xff0c;否则当我新建一个项目的时候&#xff0c;我需要将…

实现 rollup 实现多模块打包

rollup 是一个 JavaScript 模块打包器&#xff0c;可以将许多 JavaScript 库和应用程序打包成少量的捆绑包&#xff0c;从而提高了应用程序的性能。本文详细描述如何通过 rollup 实现多模块打包。 前提 项目的目录结构 先看下项目的 package.json 文件夹&#xff1a; {&qu…

LLaMA系列 | LLaMA和LLaMA-2精简总结

文章目录 1、LLaMA1.1、模型结构1.2、训练方式1.3、结论 2、LLaMA-22.1、相比LLaMA1的升级2.3、模型结构2.3.1、MHA, MQA, GQA区别与联系 2.4、训练方式 1、LLaMA &#x1f525; 纯基座语言模型 《LLaMA: Open and Efficient Foundation Language Models》&#xff1a;https:/…