当前位置: 首页 > article >正文

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、环境验证

 docker -v

 

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

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

1.1、创建dockerfile文件
dockerfile文件内容:
#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镜像建命令如果进行多次发布的在构建前要删除掉之前运行的容器和镜像
#删除掉之前运行的容器
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命令的执行权限
解决方法:
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

http://www.kler.cn/a/580736.html

相关文章:

  • 初识Spring Batch:开启批处理的高效之旅
  • 使用阿里云操作系统控制台排查内存溢出
  • LLM应用开发(六)-联动带UI聊天机器人
  • Golang学习笔记_44——命令模式
  • Vue3 模板引用:打破数据驱动的次元壁(附高阶玩法)
  • Xss漏洞问题
  • SpringBoot + ResponseBodyEmitter 实时异步流式推送
  • 设计模式之单例模式:原理、实现与应用
  • javaweb自用笔记:请求参数、响应、分层解耦、
  • ES6 解构详解
  • Varlens(手机上的单反)Ver.1.9.3 高级版.apk
  • TCP/IP原理详细解析
  • git合并分支回滚的方法
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-5.1.1热点分片识别与均衡策略
  • ​【C++设计模式】第十八篇:备忘录模式(Memento)
  • C# OPC DA获取DCS数据(提前配置DCOM)
  • 高级java每日一道面试题-2025年2月17日-数据库篇-使用 MySQL 的索引应该注意些什么?
  • 从0开始的操作系统手搓教程43——实现一个简单的shell
  • HTML左右分页2【搬代码】
  • NO.34十六届蓝桥杯备战函数十道练习|max|min|素数|完全数|素数对|素数回文数|真素数(C++)