一、创建一个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镜像制作一个新的镜像
基础镜像 + war包 = 新镜像
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、配置版本规则
VERSION_NUMBER
${JOB_name}_${BUILD_DATE_FORMATTED,"yyyyMMdd"}
6、在Post Steps下点击add post-build Stepst添加构建docker镜像
springboot:${VERSION_NUMBER}.${BUILD_NUMBER}
如果Dockerfile文件不是在当前目录下,而在docker目录下,那么上面的位置就是./docker
7、再在Post Steps添加一个通过SSH执行远程主机的脚本,用于打包后启动tomcat容器,如图
如果在Dockerfile文件中修改了tomcat的端口,那么这里也要做相应的修改,把容器的端口改为对应的端口
docker rm -f springboot
docker run -d -p 8080:9020 --name springboot springboot:${VERSION_NUMBER}.${BUILD_NUMBER}
8、点击立即构建,成功之后访问http://ip:8080/springboot/quick,注意:1、如果没有虚拟目录,则默认项目名称为虚拟目录。2、访问端口为8080,9020是避免端口冲突设置的。