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

3 篇文章 0 订阅
3 篇文章 0 订阅

一、环境准备

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

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接口
在这里插入图片描述

到此 完成

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值