Docker+Jenkins+Springboot自动编译发布

文章介绍了如何使用Docker、Jenkins和Springboot实现自动编译和发布流程。首先,通过Jenkins自动编译Springboot项目生成jar包,然后利用shell脚本来创建Dockerfile,删除旧的镜像和容器,再基于新的jar包创建Docker镜像,并启动容器。整个过程旨在简化手动部署的繁琐步骤。
摘要由CSDN通过智能技术生成

Docker+Jenkins+Springboot自动编译发布

前言

由于项目发布公司之前一直是手动打包再进行发布,比较繁琐,故研究下了下自动发布部署,踩了一堆坑记录下。环境不同,问题不同,仅供参考:
个人思路是打算jenkins自动编译,编译完成之后利用目录挂载将生成的jar包进行docker镜像的创建,再生成容器进行启动,原本打算,jenkins以及应用全部利用docker容器去部署,在实现过程中,发现jenkins容器比较麻烦,过程也比较繁琐,最后采用了,在宿主机直接安装jenkins,dokcer仅用于应用服务的方式,整个过程
1、利用jenkins编译springboot项目的jar包
2、将已经编译好的jar,用shell脚本直接生成docker的镜像,
3、启动docker容器完成整个过程
可以理解为,jenkins从git拉取代码自动编译成jar包,然后利用shell脚本去切换当前目录到jar包目录下面,在下面创建一个Dockerfile文件,然后利用shell命令查询该项目是否有旧的镜像和容器,有的话就直接停止,删除掉旧的,利用Dockerfile文件重新生成一个新的镜像,然后在利用镜像创建容器以及启动容器,主要的就是shell脚本的编写。

1、Docker

安装Docker很简单,环境没问题的话,直接一键进行安装,一般情况下是没问题的,可能部分服务器有问题,安装命令如下:

  1. 安装docker
yum install docker-ce docker-ce-cli containerd.io

  1. 启动docker
systemctl start docker

  1. 其他命令
#查看版本信息
docker version
#查看现有镜像信息
docker images
#查看所有容器
docker ps -a
#查看docker运行状态
systemctl status docker

2、jenkins

安装jenkins,个人建议是直接安装在宿主机内,本人尝试了很久,首先采用了是放在docker里面,但是各种环境问题,需要自定义docker镜像,比较繁琐,所以直接采用在宿主机内进行安装jenkins,就是比较简单的实现方式。命令如下:
1、下载安装包

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.289.2-1.1.noarch.rpm
##后面的url连接是安装包的url,有时候可能存在安装包被更新导致url不存在,命令不要直接复制,根据实现情况进行替换,包括一些下载的目录等,只要能下载即可,如果服务器很慢,可以选择本地下载,再上传到服务器也可以

2、解压

rpm -ivh jenkins-2.190.3-1.1.noarch.rpm

3、启动

systemctl start jenkins

以上步骤只关注命令,至于说jenkins编译需要的环境支持,包括node,jdk,maven,git等自行查看其他攻略完成环境的搭建,以及配置jenkins等基本操作可查看其他攻略,git这个主要看你项目的代码仓库用的是哪个,如果是自行搭建的还是公用的,根据实际情况进行调整,本人项目代码是直接放在gitee的,所以就无需安装。

编译以及打包完成自动部署

首先了解下以上操作完成后的实际服务器环境,jenkins是直接安装到宿主机的,而打包的springboot项目的jar也是放在宿主机目录的,在jenkins打包完成之后,在jenkins的配置里面设置一个自动执行shell的脚本,去完成docker镜像的创建,容器的启动,具体如下:
在这里插入图片描述
其实整个核心就是shell脚本的编写,这个比较困难,主要针对shell脚本进行解析;

#docker仓库地址和镜像名称:版本
#TAG=${tag}
module=admin ##模块名自定义,随便叫什么都行
IMAGENAME='admin' ##镜像名,随便叫什么都行,
BASEHOME=/var/lib/jenkins/workspace/admin/ #声明jenkins的打包项目之后生成的jar包的目录,这个要根据实际情况调整,安装jenkins的方式不同会有差异,其实就是看jenkins打包项目生成的jar包在那个目录就写那个目录
DOCKERPORT=8060     # docker映射端口
PROJECTPORT=8060    #宿主机的端口

TAG=`date +%Y%m%d-%H%M%S`    # 时间TAG
REPOSITORY=$IMAGENAME:$TAG   # 镜像名称
STOPIMAGE=$IMAGENAME
##切换到target目录
cd $BASEHOME$module/target  #这个目录其实就是将当前目录设为jenkins打包之后的工作空间里面的target下面的目录
DIR=$(cd $(dirname $0) && pwd )
##开始创建一个Dockerfile文件,用于自动将jar包文件创建docker镜像
echo "创建Dockerfile文件"
# Dockerfile文件
cat > Dockerfile << EOF
FROM java:8
VOLUME /tmp
ADD ./$module.jar /$module.jar
#COPY ./bootstrap.yml /opt/test/
ENTRYPOINT ["java","-Xms128m","-Xmx256m","-XX:MetaspaceSize=128m","-XX:MaxMetaspaceSize=256m", "-Dfile.encoding=UTF-8","-Duser.timezone=GMT+8", "-jar" ,"$module.jar"]
ENV LANGUAGE C.UTF-8
ENV LC_ALL C>UTF-8
EOF
##结束
# 1、删除启动的容器
echo "开始停止并删除容器"
contari=$(docker ps -a| grep $IMAGENAME| awk '{print $1}')##查询项目之前是否已经有容器了,获取容器的id
image=$(docker images | grep $IMAGENAME | awk '{print $3}' )##查询项目之前是否已经有镜像了,获取镜像id
echo "容器"$contari
##判断容器是否存在,存在的话,直接关闭容器以及删除容器
if [ "$contari" ];then
  docker stop $contari
  echo "停止容器"$contari
  docker rm  $contari
  echo "删除容器"$contari
fi
##判断镜像是否存在,存在的话,直接删除镜像
echo "镜像"$image
if [ "$image" ];then
	echo "开始删除旧镜像"
  	docker rmi $image
  	echo "旧镜像已删除!!!!!!!!"
fi
# build新的镜像,这儿是直接根据上面的Dockerfile文件来创建新镜像,
docker build -t $IMAGENAME:$TAG .
echo "创建新的容器"
# 4、执行命令,启动容器,包括端口映射,目录挂载等
docker run -d -p $DOCKERPORT:$PROJECTPORT -v /usr/local/logs:/home/furen/logs -v /etc/localtime:/etc/localtime:ro -v /usr/tmp/generateFile:/usr/tmp/generateFile $REPOSITORY
echo "================构建结束=============="
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DockerJenkins、GitLab、Maven、Harbor和Spring Boot是一些常用的IT工具和技术,可以用于实现自动化构建和部署Docker是一个开源的容器化平台,可以将应用程序及其依赖项打包到容器中,从而实现应用程序的快速部署和隔离。使用Docker可以方便地创建、分享和管理应用程序的容器化版本。 Jenkins是一个开源的持续集成和持续交付工具,可以帮助团队自动化构建、测试和部署应用程序。使用Jenkins可以通过配置和管理各种构建和部署任务,从而实现自动化的软件开发流程。 GitLab是一个基于Git的代码托管和协作平台,可以帮助团队协同开发、管理代码和进行版本控制。使用GitLab可以方便地管理代码仓库、进行代码审查和版本管理。 Maven是一个软件项目管理和构建工具,可以帮助团队自动化构建、测试和部署Java项目。使用Maven可以方便地管理项目依赖、编译代码、运行单元测试等构建任务。 Harbor是一个开源的企业级Docker镜像仓库,用于管理和存储Docker镜像。使用Harbor可以方便地管理镜像的推送、拉取和版本控制。 Spring Boot是一个轻量级的Java开发框架,可以帮助开发者快速构建和部署基于Spring的应用程序。使用Spring Boot可以简化项目配置和管理,提高开发效率。 将这些工具结合使用,可以实现自动化构建和部署。例如,可以使用Jenkins配置一个定时任务,当代码提交到GitLab时,Jenkins自动触发构建任务。构建任务可以使用Maven编译打包和测试应用程序,然后使用Docker将应用程序打包成容器镜像,并推送到Harbor中。最后,使用Docker将应用程序部署到服务器上进行运行。这样,我们就可以实现应用程序的自动化构建和部署,提高开发和交付效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值