Jenkins + Gradle + Docker 自动化部署 SpringBoot 项目到远程服务器
一、Jenkins 下载安装
Jenkins 的下载和安装见这篇文章:Jenkins持续集成环境部署
另外,有以下几点需要注意一下:
汉化显示不全的问题:
安装 Locale Plugin 和 Localization: Chinese (Simplified) 插件,然后在系统设置中设置语言:
很奇怪,这里配置成 zh_US 反而全部显示为中文,配置为 zh_CN 则有一部分显示为中文,可能和版本有关。
权限问题:
在使用 Jenkins 的时候经常会遇到权限问题,我们进行如下配置:
在 系统管理 -> 全局安全配置 中,勾选如下两个选项:
二、Publish Over SSH
在插件管理中安装插件 Publish Over SSH
在系统管理 -> 系统配置中设置 Publish Over SSH,用于目标服务器的连接
三、设置全局全局工具配置
在 系统管理 -> 全局工具配置 当中设置 JDK、Git、Gradle 安装路径
注意:git 是要设置到执行程序那一层,不只是安装目录。这三个软件都需要在对应的服务器上安装并配置好环境变量。
四、新建任务
由于是 Gradle 项目,所以我们选择 “构建一个自由风格的软件项目
下面说几个关键的配置点:
到达一定的天数或构建数目则自动废弃前面的构建
设置项目代码存放的地址和用户名密码,并指定需要构建的分支
构建触发器,有定时、轮询等情况。GitHub hook选项的意思是,检测代码有没有更新,如果有更新则自动构建。但前提是:GitHub收到提交的代码后要主动通知Jenkins,所以Jenkins所在服务器一定要有外网IP,并且还需要做一系列的配置,本文我们暂时不做详细的介绍。
构建步骤选的是:执行 shell,由于我要打包的是 manager 模块,所以先进入 manager 目录。先执行 gradle clean 清除之前打的包,再执行 gradle build 命令重新打包。整个项目的代码下载存放的路径在服务器的:/root/.jenkins/workspace 目录下,GradleTest 为我们在 Jenkins 中创建的构建任务名。
构建后操作选择:Send build artifacts over SSH,将打好的 Jar 包发送到目标服务器指定的目录下,然后根据命令生成镜像,运行容器。
注意:生成镜像的前提是目标服务器上已经安装完成 docker 服务,基础镜像已经下载完成,dockfile已经正确编写。
这样我们一次构建就已经完成了 代码下载、打包、停止并删除目标服务器指定的容器、删除镜像、重新生成镜像、启动容器等步骤,通过这一系列的动作完成了整个SpringBoot的项目的环境部署。
通过 docker 命令查询容器运行的日志可查看容器运行的情况,如下:
红框部分为我们对 SpringBoot 项目进行请求时打印的日志。
附上创建镜像的 dockfile 供大家参考:
FROM centos MAINTAINER Jack VOLUME /tmp ADD jdk-8u212-linux-x64.tar.gz /usr/local ADD manager-1.0.0-SNAPSHOT.jar /app.jar ENV JAVA_HOME /usr/local/jdk1.8.0_212 ENV PATH $JAVA_HOME/bin:$PATH ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV LANG C.UTF-8 EXPOSE 9187 ENTRYPOINT ["java","-jar","/app.jar"]
centos:基础镜像,需要从 docker 远程仓库下载到本地
添加了两个包:JDK 和 应用程序的 Jar 包
EVN:配置 JDK 的环境变量和字符集
EXPOSE:暴露的端口,需要与 SpringBoot 项目中配置文件中的端口一致,否则外部无法访问。