编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

使用maven也能一键部署Springboot项目

wxchong 2024-10-10 12:49:24 开源技术 51 ℃ 0 评论

前面一篇文章记录了如何基于docker部署springboot项目,今天分享一下如何通过maven实现一键部署。所谓一键部署,是指在项目更新时,可以通过在本地运行一条Maven命令,即能实现项目的部署和服务器的更新。

mvn clean package -Pprod

一、服务器准备

首先,要准备好服务器,安装好必要的软件。本文中会用到docker进行项目的发布,所以必须先在服务器中安装docker-ce。安装docker的方法,网上有很多,这里就不再赘述。

其次,根据上一篇文章基于docker部署springboot项目,准备好项目发布所需要的docker镜像,目录等。

最后,在服务器中创建项目的存储目录等,在接下来的步骤中会使用。

二、项目准备

一般情况下,我们在项目发布时需要做的事情有:1、将新的jar包上传到服务器;2、更新docker镜像;3、重新启动docker容器。

我们在使用Maven发布项目时,需要做的也就是将这些任务,通过不同的maven插件来实现。

1、更新pom.xml文件

今天简单介绍一下maven-antrun-plugin,它可以实现文件上传、执行脚本等任务,完全可以实现我们项目的更新。

<build>
	<plugins>
		<!-- =========================================== -->
		<!-- 确保在Springboot打包之后再执行 -->
		<!-- =========================================== -->
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-antrun-plugin</artifactId>
			<executions>
				<execution>
					<id>deploy</id>
					<!-- 在Maven package阶段执行 -->
					<phase>package</phase>

					<goals>
						<goal>run</goal>
					</goals>
					<configuration>
						<tasks>
							<!-- 上传打包好的jar到服务器 -->
							<scp localFile="${project.basedir}/target/admin.jar"
								remoteToFile="${dev.root}:${dev.password}@${dev.host}:/home/demo/admin.jar"
								verbose="true" passphrase="" trust="true">
							</scp>
							<!-- 上传Dockerfile文件到服务器 -->
							<scp localFile="${project.basedir}/Dockerfile"
								remoteToFile="${dev.root}:${dev.password}@${dev.host}:/home/demo/Dockerfile"
								verbose="true" passphrase="" trust="true">
							</scp>
							<!-- 上传更新Docker容器的脚本到服务器 -->
							<scp localFile="${project.basedir}/deploy-admin.sh"
								remoteToFile="${dev.root}:${dev.password}@${dev.host}:/home/demo/deploy-admin.sh"
								verbose="true" passphrase="" trust="true">
							</scp>
							<!-- 执行更新Docker容器的脚本 -->
							<sshexec host="${dev.host}" trust="yes"
								username="${prod.root}" password="${prod.password}"
								passphrase=""
								command="sh /home/demo/deploy-admin.sh ${buildtimestamp}" />

							<!-- SSH -->
							<taskdef name="sshexec"
								classname="org.apache.tools.ant.taskdefs.optional.ssh.SSHExec"
								classpathref="maven.plugin.classpath" />
						</tasks>
					</configuration>
				</execution>
			</executions>
			<!-- libraries for scp impl -->
			<!-- antrun doesn't use os's scp -->
			<dependencies>
				<dependency>
					<groupId>com.jcraft</groupId>
					<artifactId>jsch</artifactId>
					<version>0.1.53</version>
				</dependency>
				<dependency>
					<groupId>ant</groupId>
					<artifactId>ant-jsch</artifactId>
					<version>1.6.5</version>
				</dependency>
			</dependencies>
		</plugin>
		<!-- =========================================== -->
		<!-- antrun plugin end -->
		<!-- =========================================== -->
	</plugins>
</build>

2、编写更新脚本

更新脚本的内容包括:重新构建项目的docker镜像文件、重新启动项目的docker容器等。

#!/bin/bash
echo "==============="
echo "部署开始"
echo "==============="

VERSION=$1

echo "新版本:" ${VERSION}


echo "1. 构建新的docker镜像."
# -t 表示指定镜像仓库名称/镜像名称:镜像标签 .表示使用当前目录下的Dockerfile
docker build -t demo/admin:${VERSION} /home/demo/admin

echo "2. 部署"
echo "- 删除旧容器:"
docker stop admin || true && docker rm admin || true
echo "- 创建新容器:"
docker run --restart=always -it -d -m 1g -p 8080:8080 -v /home/demo/admin/logs/8081:/logs -v /etc/localtime:/etc/localtime --name admin demo/admin:${VERSION}


echo "==============="
echo "部署结束"
echo "==============="

deploy-admin.sh

3、buildnumber-maven-plugin

buildnumber-maven-plugin是一个可以用来生成时间戳或序列号的插件,可以在我们每次打包时,生成不同的版本号,详细用法大家可以自行搜索。

三、一键发布

经过上面的准备,我们项目的更新发布就会方便很多,运行一条Maven命令即可:

mvn clean package -Pprod

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表