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

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

  • 一、环境准备
    • 1、项目开发环境
    • 2、Jenkins+docker运行环境
  • 二、Docker安装
  • 三、Jenkins安装
  • 四、创建一个Springboot项目
    • 1、使用IDE创建一个简单的springboot项目,用于实现自动编译部署流程。
    • 2、将项目上传到SVN版本库
  • 五、Jenkins添加任务
    • 1、新建任务
    • 2、配置任务
      • General
      • 源码管理
      • 构建触发器
      • 构建环境
      • 构建
      • 构建后操作
  • 六、自动化构建部署
    • 修改代码,提交SVN

一、环境准备

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

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

Springboot项目在Jenkins+Docker中实现自动化部署_第1张图片

创建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"Springboot项目在Jenkins+Docker中实现自动化部署_第2张图片
    选择CentOSSpringboot项目在Jenkins+Docker中实现自动化部署_第3张图片
    按照官网的描述进行在线安装
    Springboot项目在Jenkins+Docker中实现自动化部署_第4张图片

  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即可
    Springboot项目在Jenkins+Docker中实现自动化部署_第5张图片
    根据提示查看/var/lib/jenkins/secrets/initialAdminPassword这个文件,将密码复制出来,粘贴,继续进入配置页面,如下图:
    Springboot项目在Jenkins+Docker中实现自动化部署_第6张图片
    选择推荐的插件进行安装即可

  5. 注册新用户
    Springboot项目在Jenkins+Docker中实现自动化部署_第7张图片
    使用新用户登录之后的页面如下图:
    Springboot项目在Jenkins+Docker中实现自动化部署_第8张图片

  6. 设置用户权限

选择“系统管理”-“全局安全配置”Springboot项目在Jenkins+Docker中实现自动化部署_第9张图片

按照如下图进行配置:将刚刚注册的用户给予最大权限任何用户(Anonymous Users)给予可读权限
Springboot项目在Jenkins+Docker中实现自动化部署_第10张图片

  1. 全局工具配置:

配置maven,使用默认的设置即可。CentOS 安装maven请参照:https://www.cnblogs.com/HendSame-JMZ/p/6122188.html
Springboot项目在Jenkins+Docker中实现自动化部署_第11张图片

Springboot项目在Jenkins+Docker中实现自动化部署_第12张图片

配置JDK,使用CentOS 7中安装的JDK目录,CentOS安装JDK请参照:https://www.cnblogs.com/sxdcgaq8080/p/7492426.html
Springboot项目在Jenkins+Docker中实现自动化部署_第13张图片

配置Docker :
Springboot项目在Jenkins+Docker中实现自动化部署_第14张图片

配置邮件:
在“系统管理”-“系统管理”中找到如下图的配置
Springboot项目在Jenkins+Docker中实现自动化部署_第15张图片

Springboot项目在Jenkins+Docker中实现自动化部署_第16张图片

Springboot项目在Jenkins+Docker中实现自动化部署_第17张图片

邮件默认内容如下:


(本邮件是程序自动下发的,请勿回复!)

项目名称:$PROJECT_NAME

构建编号:$BUILD_NUMBER

svn版本号:${SVN_REVISION}

构建状态:$BUILD_STATUS

触发原因:${CAUSE}

构建日志地址:${BUILD_URL}console

构建地址:$BUILD_URL

变更集:${JELLY_SCRIPT,template="html"}

四、创建一个Springboot项目

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

Springboot项目在Jenkins+Docker中实现自动化部署_第18张图片

Springboot项目在Jenkins+Docker中实现自动化部署_第19张图片

Springboot项目在Jenkins+Docker中实现自动化部署_第20张图片
一路Next到:
Springboot项目在Jenkins+Docker中实现自动化部署_第21张图片

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

	
		org.springframework.boot
		spring-boot-starter-web
	

在启动类中加入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:

Springboot项目在Jenkins+Docker中实现自动化部署_第22张图片

添加SVN项目路径:
Springboot项目在Jenkins+Docker中实现自动化部署_第23张图片

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

Springboot项目在Jenkins+Docker中实现自动化部署_第24张图片

我们可以看到SVN版本库中代码已经全部提交上来了
Springboot项目在Jenkins+Docker中实现自动化部署_第25张图片

五、Jenkins添加任务

1、新建任务

选择“新建任务”
Springboot项目在Jenkins+Docker中实现自动化部署_第26张图片
输入任务名称,现在“构建一个自由风格的软件项目”点击“确定”
Springboot项目在Jenkins+Docker中实现自动化部署_第27张图片

2、配置任务

General

Springboot项目在Jenkins+Docker中实现自动化部署_第28张图片

源码管理

选择上面项目的SVN版本库路径,增加登陆凭证
Springboot项目在Jenkins+Docker中实现自动化部署_第29张图片
点击“Add”添加SVN版本库登陆凭证
Springboot项目在Jenkins+Docker中实现自动化部署_第30张图片

构建触发器

配置每次 SCM 版本变更,构建
Springboot项目在Jenkins+Docker中实现自动化部署_第31张图片

构建环境

配置每次构建前,删除工作空间
Springboot项目在Jenkins+Docker中实现自动化部署_第32张图片

构建

配置Maven,通过Maven进行构建,编写构建完成执行的Shell脚本:
Springboot项目在Jenkins+Docker中实现自动化部署_第33张图片

Springboot项目在Jenkins+Docker中实现自动化部署_第34张图片
Springboot项目在Jenkins+Docker中实现自动化部署_第35张图片

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 

构建后操作

邮件通知
Springboot项目在Jenkins+Docker中实现自动化部署_第36张图片

在一下红框部分加入想要通知的成员邮箱,多个邮箱以“,”或空格进行分割
Springboot项目在Jenkins+Docker中实现自动化部署_第37张图片

六、自动化构建部署

修改代码,提交SVN

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

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

可以看到已经开始构建了
Springboot项目在Jenkins+Docker中实现自动化部署_第38张图片

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

通过Docker命令可以查看到demo容器已经运行起来啦
在这里插入图片描述
可以看到端口的映射9120,这是我们在Jenkins任务构建配置的Shell脚本中指定的
Springboot项目在Jenkins+Docker中实现自动化部署_第39张图片

现在让我们来访问一下hello接口
Springboot项目在Jenkins+Docker中实现自动化部署_第40张图片

到此 完成

你可能感兴趣的:(Java,微服务,Spring,Spring,boot,持续几个,自动化部署)