当前位置: 首页 > 工具软件 > Maven Wagon > 使用案例 >

maven wagon插件实现自动化部署

白烨煜
2023-12-01

使用maven-wagon插件实现自动化部署

wagon-maven-plugin

在项目开发过程中,经常需要部署代码到开发环境,每天可能有好多次,每次都需要mvn clean install & package,然后上传到服务器。实际上这些繁琐的步骤可以通过一个Maven插件wagon-maven-plugin来自动完成

使用步骤

1.导入依赖

<dependency>       
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>wagon-maven-plugin</artifactId>
	<version>1.0</version>  
</dependency>  

2.在打包项目pom文件buid中配置

<build>
    <finalName>ka-admin</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>wagon-maven-plugin</artifactId>
            <version>1.0</version>
            <configuration>
                <!-- 需要部署的文件 : target下生成的包 -->
                <fromFile>target/${pack-name}.jar</fromFile>
                <!-- 服务器中上传包部署目录 -->
                <url>scp://服务器账号:密码@服务器IP/其它路径</url>
                <!-- 服务器执行的命令集合 -->
                <commands>
                    <!-- 上传后执行服务器脚本 可以直接写指令,也可以写要运行得脚本路径 -->
                    <command>sudo sh /data/deploy/ka-admin/deploy.sh</command>
                </commands>
                <displayCommandOutputs>true</displayCommandOutputs>
            </configuration>
        </plugin>
    </plugins>
    <extensions>
        <extension>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-ssh</artifactId>
            <version>2.10</version>
        </extension>
    </extensions>
</build>

其中
1.<formFile>为target下的jar包 全路径名称 如 target/ka-admin.jar
2.<url>为包上传路径 格式为 scp://服务器账号:密码@服务器IP/其它路径
3.<commands>为上传完成后需要在服务器执行的指令,可以直接写指令,也可以写在服务器中需要执行的shell脚本。一个<command>为一条指令,可以配置多条依次执行
其它配置固定

执行服务器脚本
示例

# 步骤
# 1、把旧包备份到bak目录
# 2、新包移动到工作区
# 3、杀死进程
# 4、启动服务

# 指定启动环境 以 java为例
activeProfile="test"
fileName="ka-admin"
logName="cataline.log"

#项目根路径 工作区
basePath="/data/deploy/${fileName}"
#包上传路径  
uploadPath="${basePath}/data/upload"
#备份包路径     
bakPath="${basePath}/data/bak"

baseJar="${basePath}/${fileName}.jar"
uploadJar="${uploadPath}/${fileName}.jar"
bakJar="${bakPath}/${fileName}.jar"

# 判断备份路径是否存在,不存在创建目录
if [ ! -d "$uploadPath" ]; then
 echo "mkdir ${uploadPath}"
 mkdir -p "${uploadPath}"
fi

if [ -d  "$baseJar" ]; then
 mv -f ${baseJar} ${bakJar}
fi

# 移动上传包到工作区
if [ -d "$uploadJar" ]; then
 mv -f ${uploadJar} ${baseJar}
fi

# 查看启动进程
pid=`ps -ef|grep ${fileName}.jar | grep -v grep | awk '{print $2}'`
echo "旧进程id:${pid}"
echo "e"
# 杀死进程
kill -9 $pid

# 重启进程
if [ -e "$baseJar" ]; then
 echo "开始启动此程序..."
 source /etc/profile nohup java -jar ${fileName}.jar > ${logName} 2>&1 &
 tail -f ${logName}
 pIdNew=`ps -ef|grep ${fileName}.jar | grep -v grep | awk '{print $2}'`
 echo "${fileName} 启动成功,pil:${pIdNew}..."
else
 echo "${fileName}.jar 不存在,请检查..."
fi

执行打包上传命令

mvn clean package wagon:upload-single wagon:sshexec

注意
项目部署后可能会无法启动,我碰到过是找不到主类
解决办法:
在buidl中maven打包插件中加入配置指定主类

<executions>
    <execution>
        <phase>package</phase>
        <goals>
            <goal>shade</goal>
        </goals>
        <configuration>
            <transformers>
                <transformer
                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                    <mainClass>com.androidserver.server.Main(主类全路径)</mainClass>
                </transformer>
                <transformer
                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                    <resource>META-INF/spring.handlers</resource>
                </transformer>
                <transformer
                        implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                    <resource>META-INF/spring.schemas</resource>
                </transformer>
            </transformers>
        </configuration>
    </execution>
</executions>

windows复制脚本到linux不能执行,需要修改格式为unix
修改脚本格式命令:

vim xxx.sh
后
:set ff=unix

学习记录,可能会有错误,欢迎指正

 类似资料: