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

前言:

在后台项目开发过程从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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容