Jenkins一键打包部署Spring Boot 应用的Docker镜像

1,590 阅读5分钟

一、前言

1、本文主要内容

将在项目中实际使用到的相关东西整理记录一波,同时可以方便其他同学在使用到的时候参考一下(自己也备忘),有不对的地方,欢迎指出~~

  • Docker部署SpringBoot 项目通用Dockerfile文件、脚本

  • Jenkins新建任务图文详解

3、本篇环境信息

  • 服务器

    操作系统硬件配置IP说明
    CentOS 74C16G10.133.28.54部署Jenkins
  • Jenkins版本

    Jenkins安装包有两种,一种是LTS,一种是Weekly。LTS是稳定版,Weekly每周会更新一次,一般使用LTS就行了,最新版的LTS:2.235.2

  • Docker

    Docker Engine - Community : 19.03.8

  • Spring Boot应用

    使用的是版本2.2.5.RELEASE,当然只要是一个Spring Boot应用都可以

  • GitLab

    本文演示使用的是GitLab社区版12.7.6 , 也可以使用GitHub 、Gitee或者SVN都可以

二、准备工作

1、Docker 环境安装

在Linux服务器上安装Dockers,具体可以参考:mp.weixin.qq.com/s?__biz=MjM…

2、Jenkins 环境安装

在Linux服务器上安装Jenkins,具体可以参考:mp.weixin.qq.com/s?__biz=MjM…

3、GitLab 环境安装

在Linux服务器上安装GitLab,具体可以参考:mp.weixin.qq.com/s?__biz=MjM…

三、打包及部署

一般微服务项目都会有很多个服务,本文以cloud-gateway 微服务的网关module为例来演示

1、打镜像Dockerfile及运行脚本

目前微服务盛行,既然是微服务,大部分都会采用Docker容器部署,这样可以非常快捷的扩容,所以本文也会从打镜像,镜像启动,镜像推送等方面详细的介绍下。

  • 通用版Dockerfile

     FROM java:8 # 以下4行配置可以去掉,在此展示下,只因项目中与SAP采用Jco3直连的方式,相对应的项目部署环境也需要配置JCO3的环境, ADD libsapjco3.so /home/sap/libsapjco3.so ADD sapjco3.jar /home/sap/sapjco3.jar ENV LD_LIBRARY_PATH /home/sap ENV CLASSPATH $CLASSPATH:$LD_LIBRARY_PATH/sapjco3.jar ​ ADD cloud-gateway-1.1.0-SNAPSHOT.jar /app.jar EXPOSE 8001 ENTRYPOINT ["java", "-jar","/app.jar"] ​
    

    生产环境,可以根据需求在ENTRYPOINT命令行中增加JVM相对应参数的设置

  • 执行脚本

    测试环境一般情况下,都是在一台服务器,启动多个Docker容器,此处将spring.profile.active参数提取出来了,可以做到真正的一包多环境使用,可以参考以下脚本:

     #!/usr/bin/env bash group_name='mva-cloud' app_name='cloud-gateway' app_version='1.1.0-SNAPSHOT' profile_active='test' echo '----copy jar----' # 停止容器 docker stop ${app_name} echo '----stop container----' # 删除容器 docker rm ${app_name} echo '----rm container----' # 删除镜像 docker rmi ${group_name}/${app_name}:${app_version} echo '----rm image----' # 构建新版镜像 docker build -t ${group_name}/${app_name}:${app_version} . echo '----build image----' # 启动Docker镜像 docker run -p 9527:9527 --name ${app_name} \ -e 'spring.profiles.active'='prod' \ -e TZ="Asia/Shanghai" \ -v /etc/localtime:/etc/localtime \ -v /home/zkgc/mydata/cloud/${app_name}/logs:/home/zkgc/logs/${app_name} \ -d ${group_name}/${app_name}:${app_version} echo '----start container----'
    

    生产环境,一般情况下都需要将打好的镜像推送到docker私有仓库中,所以说每一版都需要有版本号的变化,可以考虑使用时间戳动态版本号,docker私有仓库相关介绍可以参考:mp.weixin.qq.com/s?__biz=MjM…

  • Dockerfile、运行脚本run.sh放到服务器的/home/cloud/test-deploy/cloud-gateway目录,后续通过Jenkins打包的Jar 文件也需要拷贝到该目录,如果需要配置SAP的环境,那对应的jar、so文件都需要拷贝到这一个目录,这样在打镜像的时候,就会把相对应的环境打到镜像里面。

2、Jenkins创建任务

  • 新建一个自由风格的任务

  • 配置源码管理

    我这边使用的是GitLab,当然你们使用Github、Gitee都是可以的。

    增加一个访问GitLab的用户名密码

  • 配置构建

    在构建这个模块下呢,我们主要配置使用Mavenn来进行打包、配置通过SSH执行命令并传输文件等

    • 先打包使用到的通用module。点击增加构建步骤-->调用顶层Maven目标

      说明下:我这个演示项目已经把一些通用的东西抽取出来了,而gateway 是依赖这些通用的module,所以我这会先将这些通用的进行打包,防止在打包gateway的时候,找不到对应的jar包

    • 配置打包cloud-gateway,点击增加构建步骤-->调用顶层Maven目标,具体配置项参考下图:

    • 配置执行上面准备好得脚本。点击增加构建步骤-->Send files or execute commands over SSH选项,这个是将打完包得jar包拷贝到指定服务器的指定目录,完成后执行相对应的脚本,具体如下图:

      这个地方,需要提前配置好服务器的凭证信息(在公众号的其他文章有教程,可以翻一下),服务器需要开启ssh访问,我这里是Jenkins与测试服务器不在一起,如果在一起的话,就可以选择只运行脚本命令的那个构建选项即可。

    • 点击保存,这样一个任务就创建完成了。

    想发版的时候,点一下立即构建,Jenkins就会自动从代码仓库拉取最新代码,进行打包,打镜像,启动镜像一键完成了。

    另外,前台代码也是可以通过Jenkins来进行一键打包部署的,与后台的稍微有些不同,后续我会单独写一篇文章,来演示下如何进行前台代码的一键打包部署,前台代码使用的是VUE进行演示。

以上,只要你跟着步骤一步步来,完全就可以使用了,剩下的还想添加什么功能自己研究研究玩玩就好啦

                                            欢迎关注公众号私信我,一起探讨,一起学习