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

jenkins使用Jenkinsfile部署springboot+docker项目

文章目录

  • 前言
  • 一、前期准备
  • 二、编辑构建文件
  • 二、Jenkins构建
  • 总结


前言

前面使用Jenkinsfile部署了前端vue项目,接着学习Jenkinsfile部署springboot项目。


一、前期准备

已经安装好centos,并且安装了jenkins和docker。本地新建springboot并上传到gitee上。

二、编辑构建文件

打开本地工程,新增docker文件夹,新增Dockerfile文件
在这里插入图片描述
内容如下:

# jre基础环境
FROM openjdk:8-jre-alpine# 维护者信息
MAINTAINER zhy# 设置环境变量-运行时也可传参进来哈
ENV JAVA_OPTS ""# 添加jar包到容器中 -- tips: xx.jar 和 Dockerfile 在同一级
ADD *.jar /home/app.jar# 对外暴漏的端口号
# [注:EXPOSE指令只是声明容器运行时提供的服务端口,给读者看有哪些端口,在运行时只会开启程序自身的端口!!]
EXPOSE 8080# 以exec格式的CMD指令 -- 可实现优雅停止容器服务
# "sh", "-c" : 可通过exec模式执行shell  =》 获得环境变量
CMD ["sh", "-c", "echo \"****** 运行命令:java -jar ${JAVA_OPTS} /home/app.jar\"   &   java -jar ${JAVA_OPTS} /home/app.jar"]

在根目录新增Jenkinsfile文件
在这里插入图片描述
内容如下:

pipeline {agent anyenvironment {APP_NAME = 'executor-test'APP_IMAGE = 'executor-test'APP_PORT = 9999}stages {stage('环境准备') {steps {sh """# maven打包mvn clean install -DskipTests# 拷贝jar到docker目录下cp target/executor-test-0.0.1-SNAPSHOT.jar docker"""}}stage('构建Docker镜像') {steps {sh """# 删除旧容器docker ps -a | grep ${APP_NAME} | awk '{print \$1}' | xargs -i docker stop {} | xargs -i docker rm {}# 删除旧镜像docker images | grep ${APP_NAME} | awk '{print \$3}' | xargs -i docker rmi {}# 进入Docker目录cd docker# 构建镜像docker build -f Dockerfile -t ${APP_IMAGE} . --no-cache"""}}stage('运行容器') {steps {sh """docker run -d -p ${APP_PORT}:8080 --restart=always --name ${APP_NAME} ${APP_IMAGE}"""}}}
}

提交代码到gitee上,注意文件中的地址要与你自己项目的一致。

二、Jenkins构建

登录jenkins新建任务
在这里插入图片描述
添加描述信息
在这里插入图片描述
流水线选择SCM
在这里插入图片描述
选择git
在这里插入图片描述
粘贴gitee中项目地址,选择凭证,如果没有凭证,点击添加即可。
在这里插入图片描述
点击保存,立即构建
可查看控制台日志输出
在这里插入图片描述
这里遇到了一个错误,打包的镜像名称不能用大写
在这里插入图片描述
修改Jenkinsfile文件
在这里插入图片描述
提交代码,接着构建
在这里插入图片描述
构建成功,打开浏览器访问接口测试
在这里插入图片描述


总结

以上就是今天要讲的内容,本文介绍了jenkins使用Jenkinsfile部署springboot项目。

http://www.lryc.cn/news/586846.html

相关文章:

  • 代码随想录|图论|15并查集理论基础
  • Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)脚步
  • SDN软件定义网络架构深度解析:分层模型与核心机制
  • Redis缓存设计与性能优化指南
  • 解码冯・诺依曼:操作系统是如何为进程 “铺路” 的?
  • [Nagios Core] CGI接口 | 状态数据管理.dat | 性能优化
  • 基于Redis Streams的实时消息处理实战经验分享
  • Appium源码深度解析:从驱动到架构
  • 使用macvlan实现容器的跨主机通信
  • 在Intel Mac的PyCharm中设置‘add bin folder to the path‘的解决方案
  • React强大且灵活hooks库——ahooks入门实践之常用场景hook
  • p4 大小写检查
  • Rust赋能文心大模型4.5智能开发
  • QCustomPlot绘图保存成PDF文件
  • 软考中级学习系列-- 阶码与尾数
  • 香港服务器Python自动化巡检脚本开发与邮件告警集成
  • 详解Linux下多进程与多线程通信(一)
  • Leetcode 3615. Longest Palindromic Path in Graph
  • OpenLoong技术观察 | 卓益得十年磨一剑:“行者”系列人形机器人技术演进观察
  • 构造函数延伸应用
  • DH(Denavit–Hartenberg)矩阵
  • redis汇总笔记
  • JAVA生成PDF(itextpdf)
  • 译码器设计
  • 论意识与人工智能:跨越鸿沟的艰难求索
  • gitlab批量删除远程分支(推荐方案二)
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频摘要快速生成与检索优化(345)
  • 【读书笔记】《C++ Software Design》第十章与第十一章 The Singleton Pattern The Last Guideline
  • vue3 ref vs reactive值的修改
  • 【Python练习】042. 编写一个函数,实现二叉树的前序、中序、后序遍历