基于Jenkins自动化部署spring boot项目

1. 使用Jenkins来实现微服务架构下的自动化部署!

在微服务架构中,随着项目拆分越来越细,导致服务越来越多,服务的打包部署就会成为一个相当麻烦的事情。在我之前工作的公司都是本地打包好,上传到服务器上,再创建脚本运行,这样产生的问题就是服务累积越多,部署越耗大量的人力和时间,那有没有什么办法让我们部署一次之后,只要点击执行就可以自动部署呢?当然有!下面我们使用Jenkins来完成一个微服务架构中的自动化一体化部署工作。

1.1 环境准备

基于Jenkins自动化部署spring boot项目

1.2 部署架构图

基于Jenkins自动化部署spring boot项目

2 Jenkins自动化部署spring boot项目

2.1 代码上传到Gitlab

基于Jenkins自动化部署spring boot项目

基于Jenkins自动化部署spring boot项目

上传至代码仓库之后,开始进行jenkins创建任务

基于Jenkins自动化部署spring boot项目

2.2 构建jenkins任务

创建任务

基于Jenkins自动化部署spring boot项目

添加gitlab项目

基于Jenkins自动化部署spring boot项目

增加构建步骤,调用顶层maven目标

基于Jenkins自动化部署spring boot项目

配置maven环境

基于Jenkins自动化部署spring boot项目

注意,如果项目是聚合项目,构建项目中的依赖模块,否则当构建可运行的服务模块时会因为无法找到这些模块而构建失败

基于Jenkins自动化部署spring boot项目基于Jenkins自动化部署spring boot项目转存失败重新上传取消基于Jenkins自动化部署spring boot项目

# 只package admin,core,web三个模块

clean package -pl admin core web -am

复制代码

基于Jenkins自动化部署spring boot项目

使用额外脚本文件完成maven打包后的自动推送到harbor镜像仓库并启动新容器发布项目

基于Jenkins自动化部署spring boot项目

#!/usr/bin/env bash

# 初始化核心参数

# jar包名称

app_name='hongneng-test'

# 发布版本

version='latest'

# harbor镜像仓库域名地址

harbor_registry='www.example.com'

# 镜像仓库

image_prefix='hongneng'

# maven构建版本

maven_version='0.0.1-SNAPSHOT'

# 初始端口

INIT_EXPOSE=8086

# 对外服务端口

EXPOSE=8086

# jenkins任务构建原路径

jenkins_jar_path='/usr/local/docker/jenkins/jenkins_home/workspace/'

# 构建镜像路径

projects_path='/usr/local/projects/'

# 停止删除容器

docker stop ${app_name}

echo 'stop container '${app_name}' success!'

docker rm ${app_name}

echo 'delete container '${app_name}' success!'

# 复制jar包到指定目录

cp ${jenkins_jar_path}${app_name}/target/${app_name}-${maven_version}.jar  ${projects_path}${app_name}/

cp ${jenkins_jar_path}${app_name}/src/docker/Dockerfile ${projects_path}${app_name}/

# 构建推送镜像

docker login --username=zhouxinlei --password=Zxl298828 https://${harbor_registry}

docker build -t ${image_prefix}/${app_name}:${maven_version} -f ${projects_path}${app_name}/Dockerfile ${projects_path}${app_name}/.

docker tag ${image_prefix}/${app_name}:${maven_version} ${harbor_registry}/${image_prefix}/${app_name}:${version}

docker push ${harbor_registry}/${image_prefix}/${app_name}:${version}

docker rmi `docker images|grep none | awk '{print $3}'`

docker rmi ${image_prefix}/${app_name}:${maven_version}

# 运行容器

docker run -p ${EXPOSE}:${INIT_EXPOSE} --name ${app_name} -v /etc/localtime:/etc/localtime -v ${projects_path}${app_name}/logs:/var/logs -d ${harbor_registry}/${image_prefix}/${app_name}:${version}

echo 'run container '${app_name}' success!'

复制代码

Dockerfile文件编写

在代码源文件src目录下

基于Jenkins自动化部署spring boot项目

基于Jenkins自动化部署spring boot项目

# 该镜像需要依赖的基础镜像

FROM openjdk:8-jdk-alpine

VOLUME /tmp

# 声明服务运行在8080端口

EXPOSE 8086

# 将当前目录下的jar包复制到docker容器的/目录下

ADD hongneng-test-0.0.1-SNAPSHOT.jar app.jar

# 指定docker容器启动时运行jar包

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

# 指定维护者的名字

MAINTAINER zhouxinlei

复制代码

点击保存,完成hongneng-test 的执行任务创建。

2.3 执行jenkins任务

基于Jenkins自动化部署spring boot项目

可以在控制台查看maven构建步骤

基于Jenkins自动化部署spring boot项目

如下图所示,表示构建发布spring boot项目成功

基于Jenkins自动化部署spring boot项目

基于Jenkins自动化部署spring boot项目

基于Jenkins自动化部署spring boot项目

基于Jenkins自动化部署spring boot项目

查看容器运行状况

基于Jenkins自动化部署spring boot项目

2.4 访问项目接口

基于Jenkins自动化部署spring boot项目

3 总结

我们通过在Jenkins中创建任务,完成了微服务架构中服务的打包部署工作,这样当我们每次修改完代码后,只需点击启动任务,就可以实现一键打包部署,省去了频繁打包部署的麻烦。

链接:https://juejin.im/post/5e7ee45c6fb9a03c52682f4f

来源:掘金

电子书籍资料

面试资料地址

喜欢对你有帮助的话记得加个关注不迷路哦

还有关注我私信回复【资料】可以领取到一些个人收集的面试及电子书资料,或许对你有帮助!

基于Jenkins自动化部署spring boot项目

基于Jenkins自动化部署spring boot项目

《Java学习、面试;文档、视频资源免费获取》