网站首页 > 开源技术 正文
前面一篇文章记录了如何基于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
猜你喜欢
- 2024-10-10 使用java连接SFTP记录(java sftp auth fail)
- 2024-10-10 在java中使用SFTP协议安全的传输文件
- 2024-10-10 如何实现通过JAVA远程执行重启tomcat操作?
- 2024-10-10 谈谈个人对JDK函数式编程的认知与使用
- 2024-10-10 Spring Boot应用Connection Reset 异常原因分析
- 2024-10-10 java组件HuTool相关工具类的使用(六)
- 2024-10-10 基于SpringBoot打造的一套集开发与运维为一体的辅助系统
- 2024-07-05 Linux服务器间ssh免密配置(linux服务器之间免密登录)
- 2024-07-05 巧用GenericObjectPool创建自定义对象池
- 2024-07-05 springboot 使用Hutool 的 JschUtil
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)