一、创建一个Springboot项目

1、编写pom.xml

    <groupId>com.zwhxpp</groupId>
<artifactId>springboot</artifactId>
<version>1.0-snapshot</version>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--移除内嵌的tomcat-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--servlet的 api-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency> <!--热部署配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
</dependencies>
<build>
<finalName>springboot</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

注意:1)、由于Springboot项目要在tomcat的中运行,所以要移除内嵌的tomcat

   2)、用maven插件打包时,指定打包后的文件名用finalName

我们在开发时需要内置的tomcat,而在部署时不需要内置的tomcat,此时需要移除内置的tomcat,这样比较麻烦。我们可以添加如下依赖,并且设置tomcat只在编译和测试时生效即可。

      <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

2、编写启动类

@SpringBootApplication
public class MySpringBootApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(MySpringBootApplication.class); }
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(this.getClass());
}
}

如果使用外置的tomcat启动,默认的启动类要继承SpringBootServletInitiailzer类,并复写configure()方法。

3、编写controller

@Controller
public class QuickController {
@RequestMapping("/quick")
@ResponseBody
public String quick(){
return "hi,springbootzwh!";
}
}

先测试本地是否可以正常访问,注意:本地启动时注释掉pom.xml中移除内嵌tomcat的依赖。访问路径为:http://localhost:8080/quick。本地可以访问后放开pom.xml中移除内嵌tomcat的依赖

二、 准备工作:在服务器安装docker、docker-compose、tomcat、jenkins、maven、jdk。如果已经部署过项目,则下次部署项目时略过

1、在服务器安装docker

# 1、yum 包更新到最新
sudo yum update
# 2、作用:安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依
赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
# 3.1、方案一:使用ustc的(推荐)
sudo yum-config-manager --add-repo http://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 3.2、方案二:使用阿里云(可能失败)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-
ce/linux/centos/docker-ce.repo
# 4、 安装docker;出现输入的界面都按 y
sudo yum install -y docker-ce
# 5、 查看docker版本
docker -v
#6、设置开机启动
systemctl enable docker
#7、启动、停止、重启
systemctl start docker
systemctl stop docker
systemctl restart docker
#8、查看docker的状态
systemctl status docker

2、在服务器安装docker-compose

curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看版本信息
docker-compose -version

3、在服务器安装tomcat

#拉取tomcat镜像到本地
docker pull daocloud.io/library/tomcat:8.5.15-jre8
#创建并启动容器,tomcat在容器中的目录默认在/usr/local/tomcat/webapps
docker run -di --name=tomcat -p 9000:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps daocloud.io/library/tomcat:8.5.15-jre8

浏览器访问tomcat,ip:8080,看是否启动成功

4、在服务器安装jenkins(可以安装在电脑本地)

#拉取镜像
docker pull jenkins/jenkins
#在root目录下新建jenkins目录
#docker-compose安装jenkins,配置docker-compose.yml
version: '3.1'
services:
jenkins:
restart: always
image: jenkins/jenkins
container_name: jenkins
ports:
- 8888:8080
- 5000:5000
volumes:
- ./data:/var/jenkins_home
#启动运行查看日志
docker-compose up -d
docker-compose logs -f
#给data权限
chmod 777 data
docker-compose restart

注意:/data:/var/jenkins_home表示data目录与/var/jenkins_home目录进行挂载。

浏览器访问jenkins,ip:8888

5、在服务器安装maven和jdk

1、安装maven:将本地的maven赋值到data目录下。

2、安装jdk:将jdk-8u202-linux-x64.tar.gz拷贝到服务器,解压并移动到data目录下。

6、在GitHub上新建一个仓库,并将代码推送到GitHub,推送前新增.gitignore文件

7、基于tomcat镜像制作一个新的镜像

1、先创建一个目录,存放Dockerfile文件

mkdir springbootprogramn

2、把自己的war包放到这个目录下

3、创建Dockerfile文件,内容如下

#设置tomcat镜像
FROM daocloud.io/library/tomcat:8.5.15-jre8
#删除webapps下面之前的war包
RUN rm -rf /usr/local/tomcat/webapps/*.war
#把新的war包放webapps下面
ADD target/demo.war /usr/local/tomcat/webapps
#切换到指定目录,如果不需要修改端口号可不加这两行
#WORKDIR /usr/local/tomcat/conf/
#设置tomcat的启动端口 即将8080端口替换为9020,防止端口冲突
#RUN sed -i 's|"8080"|"9020"|' server.xml

上面的命令分析:从仓库中使用tomcat镜像,然后删除webapps下面的文件,把war包放到webapps下。

4、生成镜像

docker build -t springboot:1.0 .

springboot:1.0指定自定义镜像的名称和版本号,点表示war包和Dockerfile文件是在同一目录下。

5、创建并启动容器

docker run -d -p 8080:8080 --name=springboot springboot:1.0

8、配置jenkins

参考文档https://www.cnblogs.com/zys2019/p/13292619.html

1、在浏览器访问http://ip:8888,先进入jenkins容器中,在查找密码。

2、点击选择插件来安装

3、搜索安装必要的插件,这里安装git parameter和publish over ssh

选择好后点击安装,会安装插件

4、创建管理员账户

5、安装插件,docker、SSH、Version Number和Maven插件,SSH是后面连接docker要用到的,Version Number插件修改版本号。安装完成后需重启jenkins。

6、开启docker的2375端口,用于远程访问,

1)、打开docker的配置文件,添加参数:-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

vi /usr/lib/systemd/system/docker.service

参数配置如图:

配置后保存,重启docker

systemctl daemon-reload
systemctl restart docker

7、配置dcoker连接,系统管理-->系统配置-->Cloud-->点击a seprate configuration page-->Docker cloud details

8、配置全局的jdk和maven

9、添加凭据,由于后面要通过ssh连接服务器,故要添加凭据。

10、在系统配置中配置SSH远程主机信息,配置后点击连接进行测试。

三、部署项目

1、在项目的根目录下新建一个Dockerfile的文件,内容如下

#设置tomcat镜像
FROM daocloud.io/library/tomcat:8.5.15-jre8
#删除webapps下面之前的war包
RUN rm -rf /usr/local/tomcat/webapps/*.war
#把新的war包放webapps下面
ADD target/springboot.war /usr/local/tomcat/webapps
#切换到指定目录,如果不需要修改端口号可不加这两行
WORKDIR /usr/local/tomcat/conf/
#设置tomcat的启动端口
RUN sed -i 's|"8080"|"9020"|' server.xml

2、新建任务-->输入任务的名称:springboot-->选择构建一个maven项目

3、配置git

4、设置忽略test文件

-U clean install -DskipTests=true

  如果pom.xml不是在项目的路径下,而是在下一层目录,则可写为下一层目录/pom.xml

5、配置版本规则

6、在Post Steps下点击add  post-build Stepst添加构建docker镜像

如果Dockerfile文件不是在当前目录下,而在docker目录下,那么上面的位置就是./docker

7、再在Post Steps添加一个通过SSH执行远程主机的脚本,用于打包后启动tomcat容器,如图

如果在Dockerfile文件中修改了tomcat的端口,那么这里也要做相应的修改,把容器的端口改为对应的端口

docker run -d -p 8080:9020 --name springboot springboot:${VERSION_NUMBER}.${BUILD_NUMBER}

8、点击立即构建,成功之后访问http://ip:8080/springboot/quick,注意:1、如果没有虚拟目录,则默认项目名称为虚拟目录。2、访问端口为8080,9020是避免端口冲突设置的。

docker+tomcat+jenkin实现立即构建Springboot项目的更多相关文章

  1. Docker运行Mysql,Redis,SpringBoot项目

    Docker运行Mysql,Redis,SpringBoot项目 1.docker运行mysql 1.1拉取镜像 1.2启动容器 1.3进入容器 1.4开启mysql 1.5设置远程连接 1.6查看版 ...

  2. 构建Springboot项目、实现简单的输出功能、将项目打包成可以执行的JAR包(详细图解过程)

    1.构建SpringBoot项目 大致流程 1.新建工程 2.选择环境配置.jdk版本 3.选择 依赖(可省略.后续要手动在pom文件写) 4.项目名 1.1 图解建立过程 1.2 项目结构 友情提示 ...

  3. Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署

    使用Azure Devops构建java springboot项目,创建镜像并容器化部署 1.创建一个springboot项目,我用现有的项目 目录结构如下,使用provider项目 在根目录下添加D ...

  4. linux服务器中Jenkins集成git、Gradle持续构建Springboot项目

    Jenkins是用java编写的开源持续集成工具,目前被国内外各公司广泛使用.本章教大家如何在linux服务器中使用Jenkins自动发布一个可作为linux服务发布的Springboot项目. 自动 ...

  5. win10安装docker并结合Idea2018.1部署springboot项目

    一.准备工作 1..工具:win10,idea2018,maven3.5,jdk8 二.win10安装docker 1.win10安装docker:http://www.runoob.com/dock ...

  6. Docker容器入门之一:部署SpringBoot项目

    一.环境准备:    1.vm虚拟机: Workstation 12 Pro 12.5.7 build-5813279 2.Centos 7 在虚拟机上安装好Centos7系统后,就可以开始准备安装D ...

  7. 在同一个tomcat下部署多个springboot项目时,springboot项目无法正常启动的问题

    这个问题是基于,不使用springboot内置的tomcat会产生(即使用自己的tomcat时). 今天在部署springboot项目的时候遇到了一个问题,怎么部署都访问不了,在网上查了很多原因,什么 ...

  8. SpringBoot学习笔记(一)——构建springboot项目

    生成一个SpringBoot的项目 开发和学习SpringBoot需要一个生成好的SpringBoot项目. 1.可以使用一些IDE(Integrated Development Environmen ...

  9. 利用Jenkins实现jdk11+Maven构建springboot项目

    目录 原理图 前期准备 Jdk11安装 Jenkins安装 Maven安装 Jenkins的设置 插件安装 变量配置 搭建项目 1.通用配置 2.源码管理 3.构建触发 4.Maven的构建选项 5. ...

随机推荐

  1. python--基础3(流程语句)

    资源池 链接:https://pan.baidu.com/s/1OGq0GaVcAuYEk4F71v0RWw 提取码:h2sd 本章内容: if判断语句 for循环语句 while循环语句 break ...

  2. Go语言学习-main和init

    main 函数和 init 函数Go里面有两个保留的函数: init 函数(能够应用于所有的 package )和 main 函数(只能应用于 package main ).这两个函数在定义时不能有任 ...

  3. PHP-表单提交(form)

    PHP-表单提交 一  form表单 GET    将表单内容附加到URL地址后面,提交的信息长度有限制,不可以超过8192个字节,同时不具有保密性,而且只能传送ASCII字符(一般传送的不保密性数据 ...

  4. 关于RabbitMQ的简单理解

    说明:想要理解RabbitMQ,需要先理解MQ是什么?能做什么?然后根据基础知识去理解RabbitMQ是什么.提供了什么功能. 一.MQ的简单理解 1. 什么是MQ? 消息队列(Message Que ...

  5. linux开发各种I/O操作简析,以及select、poll、epoll机制的对比

    作者:良知犹存 转载授权以及围观:欢迎添加微信公众号:羽林君 IO 概念区分 四个相关概念: 同步(Synchronous) 异步( Asynchronous) 阻塞( Blocking ) 非阻塞( ...

  6. 1154 Vertex Coloring

    题目前半略 Sample Input: 10 11 8 7 6 8 4 5 8 4 8 1 1 2 1 4 9 8 9 1 1 0 2 4 4 0 1 0 1 4 1 0 1 3 0 0 1 0 1 ...

  7. [HDU-5172] 单点查询线段树

    题意: 给你一个长度为n的数组v[],有m次询问,问你在区间[L,R]中是否包含区间[1,R-L+1]的全部数字,如果是输出YES,否则输出NO 题解: 区间[1,R-L+1]与区间[L,R]的长度一 ...

  8. nuoyanli 520 Let‘s play computer game

    H题 描述 xxxxxxxxx在疫情期间迷上了一款游戏,这个游戏一共有nnn个地点(编号为1--n1--n1--n),他每次从一个地点移动到另外一个地点需要消耗 一定的能量,每一个地点都有一些珠宝,输 ...

  9. 6.Header交换机之模拟验证用户身份

    标题 : 6.Header交换机之模拟验证用户身份 目录 : RabbitMQ 序号 : 6 var channel = connection.CreateModel(); ​ //设置服务质量 ch ...

  10. 1005E1 Median on Segments (Permutations Edition) 【思维+无序数组求中位数】

    题目:戳这里 百度之星初赛原题:戳这里 题意:n个不同的数,求中位数为m的区间有多少个. 解题思路: 此题的中位数就是个数为奇数的数组中,小于m的数和大于m的数一样多,个数为偶数的数组中,小于m的数比 ...