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

相关推荐
薛定谔的猫-菜鸟程序员6 分钟前
基于 Electron 的本地短视频解析与下载工具:架构设计与工程实践
java·electron·音视频
音符犹如代码1 小时前
Arthas Profiler 火焰图实战:CPU 热点在哪一目了然
java·jvm·spring boot
小园子的小菜1 小时前
Java 并发编程:线程安全队列全解 —— 阻塞与非阻塞实现原理及源码深度剖析
java·开发语言
好好沉淀1 小时前
Windows 下升级 Maven 3.6.1 到 3.9.9 踩坑全记录
java·windows·maven
CodexDave1 小时前
Python 自动化接单实战(一):把 CSV 需求做成配置驱动解析器
java·python·自动化·json·数据清洗·python自动化·csv处理
XS0301062 小时前
Spring框架
java·后端·spring
Rabitebla2 小时前
C++ 内存管理全面复习:从内存分布到 operator new/delete
java·c语言·开发语言·c++·算法·leetcode
huameinan狮子2 小时前
微服务化的基石——持续集成
大数据·ci/cd·微服务
萧瑟余晖2 小时前
Java深入解析篇四之函数式编程详解
java·开发语言
一次旅行2 小时前
act本地预跑GitHub Actions:Python项目完整CI/CD流水线实战
python·ci/cd·github