最近接手了几个 tomcat 的 web 应用,每次功能上线的时候都要收工部署到远程的开发环境、生产环境,操作步骤挺多的,本着能机器做的绝不人工做的原则找了几个自动部署的方案,对比了一下,发现 maven 的 cargo-maven2-plugin 插件最适合当前场景,分享一下。
这个插件的工作原理是利用 tomcat 自带的 manager 应用来部署 web 应用,项目介绍 https://codehaus-cargo.github.io/cargo/Home.html
要做的步骤也挺简单,以我本机的 tomcat8 为例。首先确保要部署的远程环境中的 tomcat 下已经存在 manager 应用,接着配置 tomcat8 下 manger 访问的 role username password ,修改 tomcat8/conf/tomcat-users.xml 文件,增加如下配置:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="123456" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
为了能让用户能以 text 访问 manager ,最好给分配的用户名配置上所有这四种tomcat 预定义的角色 manager-gui、manager-script、manager-jmx、manager-status
接着在实际的 web 项目的 pom 文件中增加插件配置:
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.5.0</version>
<configuration>
<container>
<containerId>tomcat8x</containerId>
<type>remote</type>
</container>
<configuration>
<type>runtime</type>
<properties>
<cargo.protocol>http</cargo.protocol>
<cargo.hostname>实际域名</cargo.hostname>
<cargo.servlet.port>实际端口号</cargo.servlet.port>
<cargo.remote.username>admin</cargo.remote.username>
<cargo.remote.password>123456</cargo.remote.password>
<cargo.remote.uri>http://实际域名:实际端口号/manager/text</cargo.remote.uri>
</properties>
</configuration>
</configuration>
</plugin>
cargo.remote.username 和 cargo.remote.password 就是上面配置的 tomcat-users.xml 文件里 user 节点的 username 和 password ,cargo.remote.uri 里的 http://实际域名:实际端口号/ 就是远程部署的tomcat实际访问的根路径地址。
最后在 web 项目根目录运行命令:
mvn org.codehaus.cargo:cargo-maven2-plugin:redeploy
一键远程部署 web 应用就搞定了。
如果想命令短一点可以在 maven 的 settings.xml 中增加一个 pluginGroup :
<pluginGroups>
<pluginGroup>org.codehaus.cargo</pluginGroup>
</pluginGroups>
这样命令就可以简写成:
mvn cargo:redeploy