Mavenプラグインwagon-maven-pluginを介してサーバーへのSpringBootプロジェクトの迅速なデプロイを実現します
関連する参照コンテンツのリンクアドレス:
- サーバーへのSpringBootの自動展開
- mavenwagon-maven-pluginがリモートデプロイメントを実現
- wagon-maven-pluginを使用して、Javaプロジェクトをリモートサーバーにデプロイします
1.wagon-maven-pluginの概要
Mavenプラグインwagon-maven-pluginを使用して、デプロイメントを自動的に完了します。
springbootプロジェクトを開発し、デプロイメントプロジェクトを(テスト)するときは、最初にそれをjarファイルにパッケージ化し、次にshellコマンドを使用してSCPによってアップロードされたLinuxサーバー上の元のサービスを停止し、元のコードを削除してから実行する必要があります。アップロードしたばかりのjarファイル...、これは一連の反復的で退屈な操作です。またwagon-maven-plugin
、複雑な操作を簡素化できます。
2、コード例
2.1Linuxサーバーのユーザー名とパスワードを構成する
<properties>
<!--服务器项目运行的地址-->
<service-path>/project/</service-path>
<pack-name>${project.artifactId}-${project.version}.jar</pack-name>
<!--ssh登录服务器的ip和端口 端口一般默认22-->
<remote-addr>ip:port</remote-addr>
<remote-username>服务器用户名</remote-username>
<remote-passwd>服务器密码</remote-passwd>
</properties>
2.2Mavenはjarに依存します
<!-- https://mvnrepository.com/artifact/org.codehaus.mojo/wagon-maven-plugin -->
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>2.0.0</version>
</dependency>
2.3pom.xmlのビルドを変更する
<build>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh</artifactId>
<version>2.8</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
<version>1.0</version>
<configuration>
<fromFile>target/${pack-name}</fromFile>
<url><![CDATA[scp://${remote-username}:${remote-passwd}@${remote-addr}${service-path}]]></url>
<!-- 在服务器执行的命令集合 -->
<commands>
<!-- 杀死原来的jar进程 -->
<command>pkill -f ${pack-name}</command>
<!-- 重新启动jar进程,程序的输出结果写到log文件中 -->
<command><![CDATA[nohup java -jar ${service-path}/${pack-name} --spring.profiles.active=dev > ${service-path}/bd.log 2>&1 & ]]></command>
<command><![CDATA[netstat -nptl]]></command>
<command><![CDATA[ps -ef | grep java | grep -v grep]]></command>
</commands>
<!-- 显示运行命令的输出结果 -->
<displayCommandOutputs>true</displayCommandOutputs>
</configuration>
</plugin>
</plugins>
</build>
2.4コマンドの実行
pom.xmlファイルと同じディレクトリのターミナルで次のmvnコマンドを実行します
mvn clean package wagon:upload-single wagon:sshexec
3、2、構成
3.1wagon-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>
<!-- 需要部署的文件 -->
<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
ます。ここでは、springbootプロジェクトをパッケージ化するためのMavenパッケージ化コマンドに精通しています。 - 次に、パッケージ化されたファイルをアップロードして実行し
wagon:upload-single
ます:; - シェルコマンド(スクリプト)を実行します。主に、元のサービスを停止、削除し、新しいサービスを開始し、以下を実行します
wagon:shexec
。
アップロードファイルを使用して実行する場合は、シェルコマンドを実行します。コマンドは、2つを1つにマージしますmvn wagon:upload-single wagon:sshexec
。(注:順序は順番になっている必要があります)
パッケージ化、ファイルのアップロード、シェルコマンドの3つの実行を一緒に実行する場合は、以下を実行しますmvn clean package wagon:upload-single wagon:sshexec
。
3.2コマンドにwagon:upload-single wagon:sshexec
組み込まれpackage
ています(最適化、オプションのステップ)
上記のコマンドが複雑だと思う場合は、パッケージ化するたびに、ファイルをアップロードし、シェルスクリプトを実行して、3つを一緒に実行します。ファイルをアップロードし、パッケージ化に組み込まれたシェルスクリプトコマンドを実行すると、すぐwagon:upload-single wagon:sshexec
にpackage
コマンドにマージされます。コマンドパッケージpackage
、ファイルのアップロードとシェルコマンドの実行が実行されます。
<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>
<!-- 需要部署的文件 -->
<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
。
説明:
この手順は、シェルコマンドのパッケージ化、アップロード、および実行の実行を最適化するだけであり、必要な構成ではありません。
3.3パスワードはmavenのsettings.xmlにあります(最適化された構成)
ファイルのアップロードにはパスワードが含まれます。パスワードは、pom.xml(上記で説明)またはmavenのsettings.xmlに配置できます。
3.3.1settings.xmlでパスワードを構成します
<servers>
<server>
<id>assets</id>
<username>root</username>
<password><![CDATA[密码]]></password>
</server>
</servers>
注: <id>
値は一意である必要があります。
3.3.2Pom.xml構成
<configuration>
<serverId>
その値を増やすための<server>
ラベル<id>
と同じ値のsettings.xmlラベル。
<configuration>
<serverId>assets</serverId>
</configuration>
写真が示すように:
3.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! '
3.5 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>