wagon-maven-plugin插件实现自动化构建部署到服务器

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 wagon-maven-plugin插件实现自动化构建部署到服务器,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

概述

一般情况下,小公司的基础设施不完善,并没有一个功能齐备完善的服务自动化构建发布pass平台,此时就需要我们手动将项目的构建物,如 jar/war 上传到 Linux 服务器,然后再手动启动 start 脚本。

于是产生这样的需求:能否实现将mvn install生成的 jar/war 上传部署到远程 Linux 服务器,并重启服务,实现一定程度的自动化?

wagon-maven-plugin就是能实现这个功能的一款maven插件。

实现

首先,在pom.xml文件的<build>里新增配置:

<extensions>
    <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ssh</artifactId>
        <version>3.0.0</version>
    </extension>
</extensions>

<build><plugins>下面新增配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>wagon-maven-plugin</artifactId>
    <version>1.0</version>
    <configuration>
        <serverId>114.215.175.236</serverId>
        <fromFile>target/${project.artifactId}.jar</fromFile>
        <url>scp://root@114.215.175.236/home/hpba/HPBA/ALM//extractor-alm</url>
        <commands>
			<command>sh /data/apps/arm-webapp/arm-webapp-jar-start.sh</command>
		</commands>
    </configuration>
</plugin>

同时还需要在本地 maven 的 setting.xml 文件里面配置这个 server 的用户名和密码,使得 ssh 可以正常连接到 server:

<server>
	<id>114.215.175.236</id>
	<username>root</username>
	<password>111</password>
</server>

完成上述配置项之后,打开maven面板,发现多了一个wagon plugin:
在这里插入图片描述
我们主要关注3项:

  • upload是上传整个文件夹,此时上述配置(仅仅只需要上传一个 jar)不生效
  • 使用upload-single,实现将单个文件scp上传部署到Linux server,默认覆盖原文件。
  • 使用sshexec,即执行 pom.xml 文件里面配置的command:sh /data/apps/arm-webapp/arm-webapp-jar-start.sh,注意使用sh执行脚本,不能使用./aaa.sh方式。否则报错:Failed to execute goal org.codehaus.mojo:wagon-maven-plugin:1.0:sshexec (default-cli) on project arm-webapp: Unable to execute remote command

步骤:

  1. 在 terminal 里输入命令: mvn clean install
  2. 双击 wagon:upload-single,第一次执行时,需要输入yes确认:在这里插入图片描述
    验证是否上传成功,进入到上述配置目录,使用 ll 目录查看 jar 的构建时间戳即可。
  3. 双击 wagon:sshexec,即可实现脚本执行。脚本的功能:杀掉当前服务进程,并重启。
    验证服务是否重启,输入 jps,若 pid 发生变化,则表明服务已重启。

至此,将大部分手动操作实现自动化。

附上:

#!/bin/bash

APP=arm-webapp;
PORT=6100;
DEBUG=false;

SH=$(readlink -f "$0")
if [ "$1" = "--debug=false" ]; then
  echo $SH
  sed -i "s/^DEBUG=true;/DEBUG=false;/g" "$SH"
  echo -e "\033[0;31m debug set false,please rerun \033[0m"
  exit 0
elif [ "$1" = "--debug=true" ]; then
  echo $SH
  sed -i "s/^DEBUG=false;/DEBUG=true;/g" "$SH"
  echo -e "\033[0;31m debug set true,please rerun \033[0m"
  exit 0
fi

BIN="$APP.jar"
DEBUG_PORT="3$PORT"
PWD=`pwd`
PID=`ps -eaf |grep java | grep $BIN | awk '{print $2}'`
SHELL_FOLDER=$(dirname $(readlink -f "$0"))
LOG_HOME="$SHELL_FOLDER/logs"
BIN_HOME="$SHELL_FOLDER/bin"

if [ -z "$APP" ]; then
  echo "no app";
  exit 1;
fi

if [ -n "$PID" ]; then
  echo "kill $PID"
  kill -9 $PID
fi

if [ "$DEBUG" = "true" ]; then
  echo -e "\033[0;31m debug is open,port=$DEBUG_PORT \033[0m"
  JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=y"
fi

JAVA_HEAP_DUMP_OPTS=-XX:HeapDumpPath=$LOG_HOME/dump.hprof
JAVA_OPTS="$JAVA_OPTS -Dserver.port=$PORT -Dlog.home=$LOG_HOME -Duse.flume=false -Xms128m -Xmx2048m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=1024m -Dfile.encoding=utf-8 -XX:+HeapDumpOnOutOfMemoryError $JAVA_HEAP_DUMP_OPTS"

nohup java $JAVA_OPTS -jar $BIN_HOME/$BIN >$LOG_HOME/console.log 2>&1 &

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142238.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!