Spring Boot + Maven 插件:一键构建 Linux 服务化部署方案

2025-03-16 / 1 阅读 / Java

插件开源地址

https://gitee.com/wangbing1991/deployee-maven-plugin.git
http://git.wbsite.xyz/plugin/deployee-maven-plugin.git

一、背景与痛点:传统部署模式的困局

  1. 多环节人工干预- 本地打包 → SFTP 上传 → 环境检测 → JDK 安装 → 脚本配置 → 手动启停

    • 典型场景:测试环境因重启导致服务雪崩

  2. 环境异构性挑战- 多版本 JDK 依赖问题(如 JDK8/11/17)

    • 服务管理方式差异(systemd/sysvinit)

  3. 工具链适配矛盾- Jenkins 等 CI/CD 工具在微型项目中的资源浪费

    • 脚本化部署的维护成本与学习门槛

二、解决方案选型:Maven 插件的技术突围

  1. 开发范式对比- 传统脚本方案:Shell/PowerShell 的平台局限性

    • 插件化方案:Maven 生命周期集成的天然优势

  2. 技术可行性验证- 跨平台支持:Java 原生实现屏蔽系统差异

    • 版本可控性:通过 Maven 坐标统一依赖管理

  3. 核心功能设计- 自包含 JDK 镜像:支持离线环境部署

    • 服务注册自动化:systemd 单元文件生成

    • 配置热加载:外部化配置文件管理

三、实战指南:从代码到服务的蜕变

  1. 配置示例xml

    <build>
        <!-- 项目名称 -->
        <finalName>${artifactId}</finalName>
        <!-- 默认的主代码目录 -->
        <sourceDirectory>src/main/java</sourceDirectory>
        <!-- 默认的测试代码目录 -->
        <testSourceDirectory>src/test/java</testSourceDirectory>
        <plugins>
            <!-- 一键部署 -->
            <plugin>
                <groupId>xyz.wbsite</groupId>
                <artifactId>deployee-maven-plugin</artifactId>
                <version>latest</version>
                <configuration>
                    <targetPath>${build.directory}</targetPath>
                    <targetFile>${build.finalName}.${project.packaging}</targetFile>
                    <servers>
                        <!-- 服务部署信息 -->
                        <server>
                            <!-- 服务名称 -->
                            <name>something</name>
                            <!-- 服务器远程地址 -->
                            <ip>192.168.1.100</ip>
                            <!-- 服务器远程端口 -->
                            <port>22</port>
                            <!-- 服务器登录账户 -->
                            <username>root</username>
                            <!-- 服务器登录密码 -->
                            <password>***</password>
                            <!-- 部署环境 对应spring.profiles.active-->
                            <deployActive>test</deployActive>
                            <!-- 部署路径 -->
                            <deployPath>/www</deployPath>
                            <!-- 部署端口 -->
                            <deployPort>8080</deployPort>
                        </server>
                    </servers>
                </configuration>
            </plugin>
        </plugins>
    </build>

  2. 执行流程bash

    	# 一键部署命令
    	mvn clean package deployee:deploy

    图形化操作
    image.png

  3. 结果示例

    [INFO] ------------------------------------------------------------------------
    [INFO] TargetPath **\target**
    [INFO] TargetFile case-subsidy.jar
    [INFO] Server[10.10.10.11:8081] start deploying
    [INFO] server[10.10.10.11] login success.
    [INFO] test environment
    [INFO] /www/demo
    [INFO] jre[case] has been installed
    [INFO] upload package finish
    [INFO] stop service demo
    [INFO] start service demo
    [INFO] check service finish
    [INFO] [demo] deploy success
    [INFO] You can execute the following command to operate the service
    [INFO] ========================================
    [INFO] systemctl start  demo.service
    [INFO] systemctl stop   demo.service
    [INFO] systemctl status demo.service
    [INFO] systemctl reload demo.service
    [INFO] ========================================
    [INFO] all deploy has finish
    [INFO] ------------------------------------------------------------------------
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 02:38 min
    [INFO] Finished at: 2025-03-16T09:47:31+08:00
    [INFO] Final Memory: 86M/2207M
    [INFO] ------------------------------------------------------------------------
    

相关推荐