maven wagon-maven-plugin 实现远程部署


当前项目是springboot 项目,每次(测试)部署时,要先打包成 jar 文件,再 SCP 上传的linux 服务器上,用shell 命令停上旧的服务,删除旧的代码,再运行刚刚上传的jar …,这是一系列的繁琐操作。而 wagon-maven-plugin 可以简化这些繁琐操作。

1、maven 依赖

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

2、wagon-maven-plugin 配置

2.1、wagon-maven-plugin 的配置

<build>
	<finalName>assets</finalName>
	<extensions>
		<extension>
			<groupId>org.apache.maven.wagon</groupId>
			<artifactId>wagon-ssh</artifactId>
			<version>2.10</version>
		</extension>
	</extensions>

	<plugins>
		<plugin>
			<groupId>org.codehaus.mojo</groupId>
			<artifactId>wagon-maven-plugin</artifactId>
			<version>1.0</version>			
			<configuration>
				<serverId>assets</serverId>
				<!-- 需要部署的文件 -->
				<fromFile>target/assets.jar</fromFile>
				<!-- 部署目录  用户:密码@ip+部署地址:端口 -->
				<url><![CDATA[ scp://root:密码@192.168.1.100:28/usr/tomcat_assets/ ]]></url>
				
				<!--shell 执行脚本 -->
				<commands>
					<!-- 停止服务-->
					<command>sh /usr/tomcat_assets/stop.sh</command>
					<!-- 启动服务 -->
					<command>sh /usr/tomcat_assets/start.sh</command>
				</commands>
				<displayCommandOutputs>true</displayCommandOutputs>
			</configuration>
		</plugin>
	</plugins>
</build>

使用步骤:
执行:mvn clean package 我们熟知的maven 打包命令,这里对 springboot 项目进行打包 ;
执行:wagon:upload-single 是 上传文件 ;
执行:wagon:shexec 是 执行shell 命令 。

如果想上传文件、执行shell 命令 一起执行,则执行: mvn wagon:upload-single wagon:sshexec
如果想打包、上传文件、执行shell 命令 三者一起执行,则执行: mvn clean package wagon:upload-single wagon:sshexec

如果你觉得上面的命令太复杂了? 请看 方法2

2.2、将 wagon:upload-single wagon:sshexec 合并到 package 命令中

wagon:upload-single wagon:sshexec 合并到 package 命令中,当执行打包命令 package 时,就会执行 上传文件、 执行shell 命令。

<build>
	<finalName>assets</finalName>
	<extensions>
		<extension>
			<groupId>org.apache.maven.wagon</groupId>
			<artifactId>wagon-ssh</artifactId>
			<version>2.10</version>
		</extension>
	</extensions>

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

			<executions>
				<execution>
				
					<id>upload-deploy</id>					
					<!-- 运行package打包的同时运行upload-single和sshexec -->
					<phase>package</phase>
					<goals>
						<goal>upload-single</goal>
						<goal>sshexec</goal>
					</goals>
					<configuration>
						<serverId>assets</serverId>
						<!-- 需要部署的文件 -->
						<fromFile>target/assets.jar</fromFile>
						<!-- 部署目录  用户:密码@ip+部署地址:端口 -->
						<url><![CDATA[ scp://root:密码@192.168.1.100:28/usr/tomcat_assets/ ]]> </url>

						<!--shell 执行脚本 -->
						<commands>
							<!-- 停止服务-->
							<command>sh /usr/tomcat_assets/stop.sh</command>
							<!-- 启动服务 -->
							<command>sh /usr/tomcat_assets/start.sh</command>
						</commands>
						<displayCommandOutputs>true</displayCommandOutputs>
					</configuration>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>     

使用时,执行 mvn clean package 命令即可。
此处的 mvn clean package 命令 相当于执行了 mvn clean package wagon:upload-single wagon:sshexec 命令 。

2.3、用户名和密码配置在 maven 的 settings.xml

如果密码放到项目不安全,可以将密码放到 maven 的 settings.xml 。方法1、方法2都可以这样配置。下面是方法2的配置方式。

settings.xml :

<servers>
	<server>  
		<id>assets</id>  
		<username>root</username>  
		<password><![CDATA[密码]]></password>  
	</server>
</servers>

注意: <server><id>的值与 <serverId> 的值 要保持一致。

pom.xml 的配置:

<build>
	<finalName>assets</finalName>
	<extensions>
		<extension>
			<groupId>org.apache.maven.wagon</groupId>
			<artifactId>wagon-ssh</artifactId>
			<version>2.10</version>
		</extension>
	</extensions>

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

			<executions>
				<execution>
				
					<id>upload-deploy</id>					
					<!-- 运行package打包的同时运行upload-single和sshexec -->
					<phase>package</phase>
					<goals>
						<goal>upload-single</goal>
						<goal>sshexec</goal>
					</goals>
					<configuration>
						<serverId>assets</serverId>
						<!-- 需要部署的文件 -->
						<fromFile>target/assets.jar</fromFile>
						<!-- 部署目录  用户@ip+部署地址:端口 -->
						<url><![CDATA[ scp://[email protected]:28/usr/tomcat_assets/ ]]> </url>

						<!--shell 执行脚本 -->
						<commands>
							<!-- 停止服务-->
							<command>sh /usr/tomcat_assets/stop.sh</command>
							<!-- 启动服务 -->
							<command>sh /usr/tomcat_assets/start.sh</command>
						</commands>
						<displayCommandOutputs>true</displayCommandOutputs>
					</configuration>
				</execution>
			</executions>
		</plugin>
	</plugins>
</build>     

3、与 wagon-maven-plugin 无关,但是项目可能用的配置(可以忽略)

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<configuration>
		<source>1.8</source>
		<target>1.8</target>
		<encoding>UTF-8</encoding>
	</configuration>
</plugin>
<plugin>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-maven-plugin</artifactId>
	<configuration>
		<!-- 修改相应的SpringBootApplication.java -->
		<mainClass>xxx.yyy.zzz.Application</mainClass>
	</configuration>
	<executions>
		<execution>
			<goals>
				<goal>repackage</goal>
			</goals>
		</execution>
	</executions>
</plugin>

4、 停止、启动服务相关的脚本

stop.sh 停止服务的脚本:

#!/bin/bash

APP_NAME='assets.jar'

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ];then
    echo 'Stop Process...'
    kill -9 $tpid
fi

sleep 1

tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`

if [ ${tpid} ];then
    echo 'Kill Process!'
    kill -9 $tpid
else
    echo 'Stop Success!'
fi

start.sh 启动脚本:

#!/bin/bash

fileDir=/usr/tomcat_assets
fileName=assets.jar

nohup  /usr/java/jdk1.8.0_201/bin/java -jar  ${fileDir}/${fileName} > ${fileDir}/assets.log   2>&1 &

echo $?

echo 'Start Success! '
发布了297 篇原创文章 · 获赞 263 · 访问量 114万+

猜你喜欢

转载自blog.csdn.net/xiaojin21cen/article/details/103901325