最近接手了几个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