wagon-maven-plugin插件实现自动化构建部署到服务器
概述
一般情况下,小公司的基础设施不完善,并没有一个功能齐备完善的服务自动化构建发布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
步骤:
- 在 terminal 里输入命令:
mvn clean install
- 双击
wagon:upload-single
,第一次执行时,需要输入yes确认:
验证是否上传成功,进入到上述配置目录,使用ll
目录查看 jar 的构建时间戳即可。 - 双击
wagon:sshexec
,即可实现脚本执行。脚本的功能:杀掉当前服务进程,并重启。
验证服务是否重启,输入jps
,若 pid 发生变化,则表明服务已重启。
至此,将大部分手动操作实现自动化。
附上:
#!/bin/bashAPP=arm-webapp;
PORT=6100;
DEBUG=false;SH=$(readlink -f "$0")
if [ "$1" = "--debug=false" ]; thenecho $SHsed -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" ]; thenecho $SHsed -i "s/^DEBUG=false;/DEBUG=true;/g" "$SH"echo -e "\033[0;31m debug set true,please rerun \033[0m"exit 0
fiBIN="$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" ]; thenecho "no app";exit 1;
fiif [ -n "$PID" ]; thenecho "kill $PID"kill -9 $PID
fiif [ "$DEBUG" = "true" ]; thenecho -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"
fiJAVA_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 &
wagon-maven-plugin插件实现自动化构建部署到服务器相关推荐
- 自动化构建部署(CICD)
项目管理之自动化构建部署(CICD) 理解敏捷项目管理 掌握ones使用 掌握GitLab使用 掌握Jenkins自动化项目构建与部署 1. 研发管理概述 1.1.概念 研发管理就是在研发体系结构设 ...
- 项目管理之自动化构建部署(CICD)
项目管理之自动化构建部署(CICD) 1. 研发管理概述 [目标] 理解敏捷项目管理 [路径] 1:了解研发管理概念 2:了解敏捷开发 3:了解DevOps [讲解] 1.1. 研发管理概念 研发 ...
- 云效搭建流水线实现自动化构建部署
前言 云效,是阿里云提供的一款服务类产品,能够多人协作开发集成.多种编程语言构建打包和分布式集群部署发布等服务.轻松搭建从代码提交.集成.构建到测试环境.预发环境.线上环境部署发布验证的持续交付流水线 ...
- Docker安装Jenkins实现自动化构建部署到Tomcat
安装Docker 直接装一个docker-toolbox就好了,下载最下面的最新版 http://mirrors.aliyun.com/docker-toolbox/windows/docker-to ...
- GitHub+Vue自动化构建部署
GitHub+Vue自动化构建部署 GitHub+Vue自动化构建 懒是第一生产力,写Vue都知道,写完了想在服务器上跑,就得npm run build,然后将生成的dist目录下的文件放到web目录 ...
- 【请收藏】自动化构建部署之Travis CI使用(GitHub/Travis CI/Vue)
文章目录 CI/CD 工具 Travis CI 使用 1. 注册 2. 新建Github仓库 3. 创建vue项目 4. 配置Travis CI 5. 发布到GitHub pages Travis C ...
- eclipse maven plugin 插件 安装 和 配置
本文转自:http://www.blogjava.net/fancydeepin/archive/2012/07/13/eclipse_maven3_plugin.html maven3 安装: 安装 ...
- jenkins+github+docker+maven自动化构建部署
2019独角兽企业重金招聘Python工程师标准>>> 1. jenkins插件的安装 1.1 全局工具配置(jdk1.8 + maven + docker) 点击:系统管理 --& ...
- 构建maven项目插件_如何构建一个Maven插件
构建maven项目插件 使用Okta的身份管理平台轻松部署您的应用程序 使用Okta的API在几分钟之内即可对任何应用程序中的用户进行身份验证,管理和保护. 今天尝试Okta. 由于其插件生态系统的普 ...
最新文章
- 2、Flume1.7.0入门:安装、部署、及flume的案例
- Java深度历险(二)——Java类的加载、链接和初始化
- 【C/C++】变量做数组长度
- 视频直播中用户连麦技术模型与特点分析
- js Blob对象介绍
- 数学--数论--莫比乌斯反演
- 立即更新!SonicWall 公司再次发布SMA 100 0day 固件更新
- git cherry-pick合并某个commit
- “留得五湖明月在,不愁无处下金钩“太经典,分享一下
- 本地nodejs+gulp完成字体转换 ttf转成woff2格式
- dubbo异常源码分析处理
- html微信气泡插件,微信加上个性化插件工具,瞬间逼格满满
- 土壤基因组dna提取试剂盒
- Android蓝牙开发之一:打开、关闭蓝牙
- 步进电机低频震动问题
- 用R求矩阵的特征值和特征向量
- 新一代杂志新一代杂志社新一代编辑部2022年第13期目录
- 工具推荐:ST-MCU-FINDER(ST意法半导体MCU选型,产品查找工具)
- kali翻译插件_Kali优化之安装翻译工具goldendict及使用方法
- webservice-CXF3.0
热门文章
- 大数据和人工智能未来发展趋势
- java编程个人总结_java个人总结
- S3C2440系统中断(转)
- 《管理评论》投稿经验分享21年
- Pthon中的输出函数
- discuz mysql cpu 100_Discuz导致MYSQL CPU 占用 100%?
- 计算机界面没磁盘驱动器,请将磁盘插入驱动器,电脑提示驱动器中没有磁盘怎么办...
- 大数据揭秘区块链人才大迁徙:那个你身边悄悄离职的人去哪儿了?
- 人工智能在电力系统中的应用值得思考的问题
- 明解C语言入门篇_第10章_指针