Springboot项目在Jenkins+Docker中实现自动化部署

2023-11-18

一、环境准备

描述本文开发和部署的环境基础

1、项目开发环境

1.操作系统:Windows 7或以上版本
1.开发IDE:IntelliJ IDEA 2017.2.1 x64 或者 Eclipse Jee Oxygen
2.JDK:jdk1.8.0_181或者其他1.8版本以上的jdk
3.maven:maven3.5.3 或其他3.x.x其他版本
4.版本管理:SVN

以上软件和客户端安装这里就不描述了,准备好以上环境我们就可以开发一个简单的springboot项目。

2、Jenkins+docker运行环境

1.操作系统:Centos 7
2.Jenkins : Jenkins ver. 2.138.3
3.Docker : Docker version 18.09.0, build 4d60db4

以下会详细介绍Jenkins 和 Docker 的按照步骤。

二、Docker安装

Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。
Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。社区版CE是免费的,这里我们安装CE版本的Docker。

通过 uname -r 命令查看你当前的内核版本:

uname -r

在这里插入图片描述

安装一些必要的系统工具:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

添加软件源信息:

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 缓存:

sudo yum makecache fast

安装 Docker-ce:

sudo yum -y install docker-ce

启动 Docker 后台服务:

sudo systemctl start docker

测试运行 hello-world:

docker run hello-world

在这里插入图片描述

创建Docker工作空间目录

mkdir -p /home/work/demo

创建备份目录

cd  /home/work/demo
mkdir backup

创建Dockerfile文件

cd /home/work/demo
vi Dockerfile

Dockerfile文件内容如下:

#基于openjdk:8
FROM openjdk:8

ADD demo-0.0.1-SNAPSHOT.jar demo.jar
RUN bash -c 'touch /demo.jar'

ENTRYPOINT ["java","-jar","/demo.jar"]

三、Jenkins安装

  1. 访问Jenkins官方网站:https://jenkins.io/
    点击"Download"在这里插入图片描述
    选择CentOS在这里插入图片描述
    按照官网的描述进行在线安装
    在这里插入图片描述

  2. 启动、关闭、重启jenkins服务:
    sudo service jenkins start/stop/restart

  3. 防火墙设置:
    firewall-cmd –zone=public –add-port=8080/tcp –permanent
    firewall-cmd –zone=public –add-service=http –permanent
    firewall-cmd –reload

  4. 访问jenkins:
    在浏览器中输入http://ip:8080即可
    6.
    根据提示查看/var/lib/jenkins/secrets/initialAdminPassword这个文件,将密码复制出来,粘贴,继续进入配置页面,如下图:
    在这里插入图片描述
    选择推荐的插件进行安装即可

  5. 注册新用户
    在这里插入图片描述
    使用新用户登录之后的页面如下图:
    在这里插入图片描述

  6. 设置用户权限

选择“系统管理”-“全局安全配置”在这里插入图片描述

按照如下图进行配置:将刚刚注册的用户给予最大权限任何用户(Anonymous Users)给予可读权限
在这里插入图片描述

  1. 全局工具配置:

配置maven,使用默认的设置即可。CentOS 安装maven请参照:https://www.cnblogs.com/HendSame-JMZ/p/6122188.html
在这里插入图片描述

在这里插入图片描述

配置JDK,使用CentOS 7中安装的JDK目录,CentOS安装JDK请参照:https://www.cnblogs.com/sxdcgaq8080/p/7492426.html
在这里插入图片描述

配置Docker :
在这里插入图片描述

配置邮件:
在“系统管理”-“系统管理”中找到如下图的配置
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

邮件默认内容如下:

<hr/>
(本邮件是程序自动下发的,请勿回复!)<br/><hr/>
项目名称:$PROJECT_NAME<br/><hr/>
构建编号:$BUILD_NUMBER<br/><hr/>
svn版本号:${SVN_REVISION}<br/><hr/>
构建状态:$BUILD_STATUS<br/><hr/>
触发原因:${CAUSE}<br/><hr/>
构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>
构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>
变更集:${JELLY_SCRIPT,template="html"}<br/><hr/>

四、创建一个Springboot项目

1、使用IDE创建一个简单的springboot项目,用于实现自动编译部署流程。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
一路Next到:
在这里插入图片描述

点击Finish,在pom.xml中加入了webmvc的依赖

	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>

在启动类中加入hello方法

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {

	public static void main(String[] args) {
    	SpringApplication.run( DemoApplication.class, args );
	}

	@RequestMapping(value = "/hello", method = RequestMethod.GET)
 	public String hello() {
    	return "hello world";
	}
}

2、将项目上传到SVN版本库

通过SVN客户端创建文件夹demo:
在这里插入图片描述
分享项目到SVN:

在这里插入图片描述

添加SVN项目路径:
在这里插入图片描述

选择添加的SVN路径,选择一个默认路径后点击“Share”,分享到SVN后项目中的文件名变成绿色的,此时进行提交操作,将整个项目提交到SVN:

在这里插入图片描述

我们可以看到SVN版本库中代码已经全部提交上来了
在这里插入图片描述

五、Jenkins添加任务

1、新建任务

选择“新建任务”
在这里插入图片描述
输入任务名称,现在“构建一个自由风格的软件项目”点击“确定”
在这里插入图片描述

2、配置任务

General

在这里插入图片描述

源码管理

选择上面项目的SVN版本库路径,增加登陆凭证
在这里插入图片描述
点击“Add”添加SVN版本库登陆凭证
在这里插入图片描述

构建触发器

配置每次 SCM 版本变更,构建
在这里插入图片描述

构建环境

配置每次构建前,删除工作空间
在这里插入图片描述

构建

配置Maven,通过Maven进行构建,编写构建完成执行的Shell脚本:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Shell 脚本(run.sh):

#操作/项目路径(Dockerfile存放的路劲)
BASE_PATH=/home/work/demo
# 源jar路径  
SOURCE_PATH=/var/lib/jenkins/workspace/demo/target 
#容器id
CID=$(docker ps | grep "demo" | awk '{print $1}')
 
DATE=`date +%Y%m%d%H%M`
 
# 最新构建代码 移动到项目环境
function transfer(){
    echo "最新构建代码 $SOURCE_PATH/demo-0.0.1-SNAPSHOT.jar 迁移至 $BASE_PATH ...."
        sudo cp $SOURCE_PATH/demo-0.0.1-SNAPSHOT.jar $BASE_PATH
    echo "迁移完成"
}
 
# 备份
function backup(){
	if [ -f "$BASE_PATH/demo-0.0.1-SNAPSHOT.jar" ]; then
    	echo "demo-0.0.1-SNAPSHOT.jar 备份..."
        	sudo cp $BASE_PATH/demo-0.0.1-SNAPSHOT.jar $BASE_PATH/backup/demo-$DATE.jar
			sleep 3
			sudo rm -rf $BASE_PATH/demo-0.0.1-SNAPSHOT.jar
        echo "备份 demo-0.0.1-SNAPSHOT.jar 完成"
    else
    	echo "$BASE_PATH/demo-0.0.1-SNAPSHOT.jar不存在,跳过备份"
    fi
}
 
# 构建docker镜像
function build(){
	echo "开始构建镜像..."
	cd $BASE_PATH
	sudo docker build -t demo .
}
 
# 运行docker容器
function run(){
	backup
	transfer
	build
	if [ -n "$CID" ]; then
		echo "存在demo容器,CID=$CID,重启docker容器 ..."
			sudo docker stop $CID
			sudo docker rm $CID	
			sudo docker run -d -p 9120:9120 demo
		echo "demo容器重启完成"
	else
		echo "不存在demo容器,docker run创建容器..."
			sudo docker run -d -p 9120:9120 demo 
		echo "demo容器创建完成"
	fi
}
 
#入口
run 

构建后操作

邮件通知
在这里插入图片描述

在一下红框部分加入想要通知的成员邮箱,多个邮箱以“,”或空格进行分割
在这里插入图片描述

六、自动化构建部署

修改代码,提交SVN

修改返回“hello world”为“hello world1”,提交SVN

	@RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello() {
        return "hello world1";
    }

可以看到已经开始构建了
在这里插入图片描述

在服务器Docker工作路径下可以看见赋值过来的jar包
在这里插入图片描述

通过Docker命令可以查看到demo容器已经运行起来啦
在这里插入图片描述
可以看到端口的映射9120,这是我们在Jenkins任务构建配置的Shell脚本中指定的
在这里插入图片描述

现在让我们来访问一下hello接口
在这里插入图片描述

到此 完成

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot项目在Jenkins+Docker中实现自动化部署 的相关文章

随机推荐

  • 设计模式的 C++ 实现---原型模式

    前文回顾 单例模式 一 单例模式 二 观察者模式 简单工厂模式 工厂方法模式 一 工厂方法模式 二 抽象工厂模式 一 抽象工厂模式 二 前言 原型模式指直接用一个已经存在的对象来创建一个新的对象 然后对新对象进行稍微修改即可 类似复制的操作
  • 动手学CV-目标检测入门教程4:模型结构

    3 4 模型结构 本文来自开源组织 DataWhale CV小组创作的目标检测入门教程 对应开源项目 动手学CV Pytorch 的第3章的内容 教程中涉及的代码也可以在项目中找到 后续会持续更新更多的优质内容 欢迎 如果使用我们教程的内容
  • 在单链表中删除指定值的节点

    在单链表中删除指定值的节点 题目 给定一个单链表和一个数val 删除链表中所有值为val的节点 例如 1 gt 2 gt 3 gt 4 删除3 结果为 1 gt 2 gt 4 思路1 用栈 def remove node with val1
  • Java中如何设置注释模板呢?

    转自 Java中如何设置注释模板呢 下文笔者讲述在日常开发IDE工具中设置注释模板的方法分享 如下所示 Eclipse中设置Java注释模板 Eclipse设置注释模板的菜单 Window gt Preference gt Java gt
  • 实时音频编解码之八 频带扩展

    本文谢绝任何形式转载 谢谢 1 4 8 频带扩展 在线性预测应用中 由于极点过于靠近单位圆 合成滤波器可能处于临界稳定的状态 在定点实现中这一问题更加严重 定点的量化和计算中的精度损失可能使得临界稳定的滤波器变得不稳定 极点位于单位圆外 这
  • maven 配置篇 之 settings.xml 整理中...

    maven 配置 settings xml maven2比起maven1 来说 需要配置的文件少多了 主要集中在pom xml和settings xml中 先来说说settings xml settings xml对于maven 来说相 当
  • 【JS】jsx/tsx是什么?为什么 Vue3 的组件库都在使用 jsx/tsx?如何在Vue3中使用 jsx/tsx?

    前几天得到一个疑问 为什么 React 要用 JSX 语法 这样显得代码好像 很耦合 按照传统应推荐 html js css 模版分离 这样设计的优越性到底在哪里 一 jsx是什么 JSX 即 javascript Xml的缩写 是Face
  • Springboot 封装ssh 服务

    前提条件 Linux 已经启动SSH 服务或Windows 启动SSH 服务 整体项目结构 第一步 BuleSky 的pom xml 文件
  • CMake——cmake_minimum_required

    命令简介 cmake minimum required用于设定cmake的最低版本 cmake minimum required VERSION
  • 入门强化学习(Q-learning→DQN→DDQN)

    基础 只要具备CNN分类算法的基本认识 讲解内容 内容主要通过 飞翔小鸟 游戏为例 探究如下2个问题 强化学习原理 以Q learning算法为例 深度强化学习原理 以DQN DDQN算法为例 然后大概讲下DDQN算法 如何在更复杂的解锁任
  • OLED透明屏厚度:引领未来显示技术的革命

    OLED透明屏作为一种未来显示技术 其薄度在整个行业中具有重要意义 在这篇文章中 尼伽将详细介绍OLED透明屏厚度的优势 技术挑战以及应用案例 旨在为读者全面了解OLED透明屏的发展前景 一 OLED透明屏厚度的优势 OLED透明屏采用柔性
  • springboot项目中对文件夹进行监控

    需要的依赖
  • Quartz 基本使用

    Quartz 基本使用 一 Quartz的核心概念 二 Quartz的几个常用API 三 Quartz的使用 四 Quartz核心详解 五 JobListener 六 TriggerListener 七 SchedulerListener
  • 更改:为硬件保留的内存

    电脑 联想thinkbook16P 系统 win11 内存 16G 更改前 2 3G 更改后 827MB 一 关机 不同的型号电脑进入boss模式的按键不同 我的是按F1 自己去找进入boss模式的方式 二 进入boss模式 进入boss模
  • ARM运行可执行文件出现/usr/lib/libstdc++.so.6: version `CXXABI_ARM_1.3.3' not found解决

    1 关于Linux PC上出现这种问题容易解决 直接下载个高版本的libstdc so 6 0 x复制到 usr lib中 软连接一下就好了 ln s libstdc so 6 0 x libstdc so 6 2 但是在ARM板上执行可执
  • 1 映射与函数

    文章目录 集合 集合表示法 区间与领域 两个逻辑量词 映射 函数 函数的图形 反函数 集合 集合表示法 区间与领域 两个逻辑量词 映射 函数 函数的图形 反函数
  • JavaScript一种将数据库记录建立层级关系的处理方法

    JavaScript一种将数据库记录建立层级关系的处理方法 背景 方案 提示 背景 项目开展中 有些数据往往具有层级关系 在数据中用ID Parent来标示 那么在前端如何有效的还原这种层级关系 而其是很多层级的情况 方便的将数据加载的树
  • c#处理3种json数据的实例介绍

    这篇文章主要介绍了c 处理包含数组 对象的复杂json数据的方法 需要的朋友可以参考下 网络中数据传输经常是xml或者json 现在做的一个项目之前调其他系统接口都是返回的xml格式 刚刚遇到一个返回json格式数据的接口 通过例子由易到难
  • Linux安装iptables 替换firewall

    1 查看当前防火墙状态 systemctl status firewalld service 2 关闭防火墙 并查看防火墙状态 systemctl stop firewalld service 停止firewall 3 禁止防火墙开机启动
  • Springboot项目在Jenkins+Docker中实现自动化部署

    Springboot项目在Jenkins Docker中实现自动化部署 一 环境准备 1 项目开发环境 2 Jenkins docker运行环境 二 Docker安装 三 Jenkins安装 四 创建一个Springboot项目 1 使用I