CI/CD—Jenkins实现自动构建Docker镜像运行Java程序

实现原理

1、Java代码中创建一个dockerfile文件 --> 2、代码上传至GitLab --> 3、Jenkins同步GitLab的代码进行构建生成jar --> 4、Jenkins将jar包和dockerfile文件传到测试服务器上 --> 5、在测试服务器上执行dockerfile构建jar镜像 --> 6、镜像构建完运行容器

一、环境准备

1、在测试服务器上安装docker

参考之前的文章:

k8s集群部署_calico.v3.25.1.tar-CSDN博客 中的 "二、安装docker" 步骤

2、环境验证

bash 复制代码
 docker -v

二、编写dockerfile文件并提交代码

1、IDEA上创建一个docker目录,目录下编写dockerfile

1.1、创建dockerfile文件



dockerfile文件内容:

bash 复制代码
#penjdk:17 作为基础镜像
FROM openjdk:17

# 设置工作目录
WORKDIR /root

# 将当前目录下的所有文件复制到容器的 /app 目录下
COPY ./javafile/*.jar /root/HelloWorld.jar

# 暴露端口(假设你的 Java 应用监听 8080 端口)
EXPOSE 8989

# 定义容器启动时执行的命令
ENTRYPOINT ["java", "-jar", "/root/HelloWorld.jar"]
1.2、修改代码

2、提交并合并代码


3、查看编译之后的dockerfile的位置

4、在构建步骤中配置复制dockerfile到远程主机并运行的步骤

4.1、传输多个文件的解决方法

要实现多个目录下的文件传输再添加一个Transfer Set


4.2、配置jar和dockerfile的传输路径
4.3、配置docker镜像建命令如果进行多次发布的在构建前要删除掉之前运行的容器和镜像
bash 复制代码
#删除掉之前运行的容器
docker rm -f $(docker ps |grep helloworld|awk '{print $1}')

#删除掉之前的镜像以免对系统资源造成浪费
docker rmi -f helloworld

#构建新的java镜像
docker build -t helloworld .

#运行容器
docker run -d --name helloworld -p 8989:8989 helloworld

5、构建报错排查思路

5.1、构建出现报错排查思路

++解决思路:先模拟Jenkins自动部署的步骤在测试机器上手动运行,如果运行没有问题,再排查是否是其他问题引起的。++

排查步骤一:查看测试机器上排查jar和dockfile文件是否已经传输成功
文件已经成功上传到测试服务器对应目录下

排查步骤二:执行dockerfile构建命令
发现test用户没有docker命令的执行权限

解决方法:

bash 复制代码
chmod 666 /var/run/docker.sock
5.2、再次构建
5.3、结果为:Finished: UNSTABLE情况分析

"Finished: UNSTABLE" 常见于持续集成 / 持续部署(CI/CD)工具的构建或任务执行结果反馈中,如 Jenkins、GitLab CI/CD 等。它表示任务已完成,但处于 "不稳定" 状态,这意味着构建过程虽然结束,但存在一些不符合预期的情况,不过尚未达到构建失败的严重程度。具体的含义和排查方向因工具和使用场景而异:

  • 在 Jenkins 中
    • 测试用例部分失败:构建过程包含测试环节时,如果部分测试用例失败,而构建本身仍能成功完成,任务状态就会是 "UNSTABLE"。例如,一个 Java 项目构建,在单元测试中,10 个测试用例有 8 个通过,2 个失败,就会出现这种状态。你需要查看 Jenkins 构建记录中的测试报告,找到具体失败的测试用例,检查相关代码逻辑。
    • 代码质量问题:使用代码质量检查工具(如 Checkstyle、PMD 等)时,若代码存在一些不符合规范的问题,构建也可能标记为 "UNSTABLE"。比如代码中存在未使用的变量、过长的方法等。可以查看代码质量检查报告,按照规范修改代码。
    • 构建过程有警告:构建过程中,构建脚本(如 Maven、Gradle 脚本)执行时出现警告信息,可能导致状态不稳定。例如,Maven 依赖下载时出现警告,提示某些依赖版本可能存在兼容性问题。此时,要检查构建脚本的输出日志,处理警告信息,比如更新依赖版本。
  • 在 GitLab CI/CD 中
    • 部分作业失败:如果一个 CI/CD 流水线包含多个作业(jobs),部分作业成功完成,部分作业失败,整个流水线状态可能是 "UNSTABLE"。比如一个流水线包含代码编译、测试、部署三个作业,编译和测试成功,但部署作业因权限问题失败。需要查看每个作业的详细日志,定位失败作业的问题,解决部署权限等问题。
  • 环境变量或配置问题:配置文件中的某些设置可能导致构建或部署过程不稳定。例如,在部署作业中,环境变量配置错误,使得应用部分功能无法正常初始化。要仔细检查环境变量和配置文件,确保其正确性。

三、对自动构建结果进行测试

1、在测试机器上检测运行的结果是否正常

步骤一:检测目标文件是否成功上传到测试机器上
步骤二:查看镜像是否构建成功
步骤三:查看容器是否运行成功
步骤四:查看8989端口是都已经开启
步骤五:访问前端测试

浏览器上访问url连接: http://192.168.72.132:8989/hello

相关推荐
_院长大人_29 分钟前
设计模式-工厂模式
java·开发语言·设计模式
凌波粒1 小时前
MyBatis完整教程IDEA版(2)--ResultMap/注解/一对多/多对一/lombok/log4j
java·intellij-idea·mybatis
蓝-萧1 小时前
【玩转全栈】----Django基本配置和介绍
java·后端
priority_key1 小时前
排序算法:堆排序、快速排序、归并排序
java·后端·算法·排序算法·归并排序·堆排序·快速排序
汤姆yu2 小时前
基于SpringBoot的动漫周边商场系统的设计与开发
java·spring boot·后端
皮皮林5512 小时前
快速解决 Maven 版本冲突指南 !
java·maven
灰小猿3 小时前
Spring前后端分离项目时间格式转换问题全局配置解决
java·前端·后端·spring·spring cloud
算法与编程之美3 小时前
理解Java finalize函数
java·开发语言·jvm·算法
怕什么真理无穷3 小时前
C++面试4-线程同步
java·c++·面试
lkbhua莱克瓦243 小时前
Java基础——常用算法5
java·开发语言·笔记·github