一、前言
1、本文主要内容
将在项目中实际使用到的相关东西整理记录一波,同时可以方便其他同学在使用到的时候参考一下(自己也备忘),有不对的地方,欢迎指出~~
- Docker部署SpringBoot 项目通用Dockerfile文件、脚本
- Jenkins新建任务图文详解
3、本篇环境信息
-
服务器
操作系统 硬件配置 IP 说明 CentOS 7 4C16G 10.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服务器上安装Docker环境,具体可以参考:在Linux服务器上安装Docker Engine
2、Jenkins 环境安装
在Linux服务器上安装Jenkins,具体可以参考:CentOS下使用Docker安装Jenkins及配置详细教程
3、GitLab 环境安装
在Linux服务器上安装GitLab,具体可以参考:GitLab持续集成发布之一:CentOS7下GitLab安装部署教程
三、打包及部署
一般微服务项目都会有很多个服务,本文以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私有仓库相关介绍可以参考:Docker | 在CentOS上搭建Docker私有仓库Registry-v2
-
将
Dockerfile
、运行脚本run.sh
放到服务器的/home/cloud/test-deploy/cloud-gateway
目录,后续通过Jenkins打包的Jar 文件也需要拷贝到该目录,如果需要配置SAP的环境,那对应的jar、so文件都需要拷贝到这一个目录,这样在打镜像的时候,就会把相对应的环境打到镜像里面。
2、Jenkins创建任务
-
新建一个自由风格的任务
-
配置源码管理
我这边使用的是GitLab,当然你们使用Github、Gitee都是可以的。
增加一个访问GitLab的用户名密码
-
配置构建
在构建这个模块下呢,我们主要配置使用Mavenn来进行打包、配置通过SSH执行命令并传输文件等
- 先打包使用到的通用module。点击
增加构建步骤
–>调用顶层Maven目标
- 先打包使用到的通用module。点击
说明下:我这个演示项目已经把一些通用的东西抽取出来了,而gateway 是依赖这些通用的module,所以我这会先将这些通用的进行打包,防止在打包gateway的时候,找不到对应的jar包
-
配置打包
cloud-gateway
,点击增加构建步骤
–>调用顶层Maven目标
,具体配置项参考下图: -
配置执行上面准备好得脚本。点击
增加构建步骤
–>Send files or execute commands over SSH
选项,这个是将打完包得jar包拷贝到指定服务器的指定目录,完成后执行相对应的脚本,具体如下图:
这个地方,需要提前配置好服务器的凭证信息(在公众号的其他文章有教程,可以翻一下),服务器需要开启ssh访问,我这里是Jenkins与测试服务器不在一起,如果在一起的话,就可以选择只运行脚本命令的那个构建选项即可。
- 点击保存,这样一个任务就创建完成了。
想发版的时候,点一下立即构建,Jenkins就会自动从代码仓库拉取最新代码,进行打包,打镜像,启动镜像一键完成了。
另外,前台代码也是可以通过Jenkins来进行一键打包部署的,与后台的稍微有些不同,后续我会单独写一篇文章,来演示下如何进行前台代码的一键打包部署,前台代码使用的是VUE进行演示。
以上,只要你跟着步骤一步步来,完全就可以使用了,剩下的还想添加什么功能自己研究研究玩玩就好啦
欢迎关注公众号私信我,一起探讨,一起学习