Maven使用Cargo实现自动化部署
2016-04-21 14:15
549 查看
由于公司配置的垃圾台式机,根本就没法开发,开一个sts,跑一个内嵌的tomcat就卡出翔,测试每次想在我机器上测试,所以弄了下maven下使用Cargo实现自动化部署,这样就可以把本地的应用部署到远程服务器上去,省的垃圾电脑卡出翔。
先在settings.xml里面的pluginGroups节点增加<pluginGroup>org.codehaus.cargo</pluginGroup>以便命令行调用,然后增加server
[html] view
plain copy
print?
<server>
<id>tomcat7x</id>
<username>admin</username>
<password>password</password>
</server>
1.部署到本地Web容器
1.1 standalone模式
在standalone模式,Cargo会从Web容器的安装目录复制一份配置到用户指定的目录,然后在此基础上部署应用,每次重新构建的时候,这个目录都会被清空,所有配置被重新生成
[html] view
plain copy
print?
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.4.9</version>
<configuration>
<container>
<containerId>tomcat7x</containerId>
<home>/usr/local/devtools/apache-tomcat-7.0.55</home>
</container>
<configuration>
<type>standalone</type>
<home>${project.build.directory}/tomcat7x</home>
<properties>
<!-- 更改监听端口 -->
<cargo.servlet.port>8088</cargo.servlet.port>
</properties>
</configuration>
</configuration>
</plugin>
然后用mvn cargo:run启动,关于cargo:run于cargo:start有什么区别,后续会讲到。
1.2 existing模式
在existing模式下,用户需要指定现有的web容器配置目录,然后Cargo会直接使用这些配置并将应用部署到其对应的位置
[html] view
plain copy
print?
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.4.9</version>
<configuration>
<container>
<containerId>tomcat7x</containerId>
<home>/usr/local/devtools/apache-tomcat-7.0.55</home>
</container>
<configuration>
<type>existing</type>
<home>/usr/local/devtools/apache-tomcat-7.0.55</home>
</configuration>
</configuration>
</plugin>
然后运行cargo:run之后在对应的tomcat的webapps目录下能够看到被部署的应用
2.部署到远程Web容器
这里注意在远程部署模式下,container元素的type子元素的值必须为remote,如果不指定,Cargo会默认使用installed,并寻找对应的容器安装目录或者安装包,一般我们远程部署的服务器上都有设定好的web容器了,并不需要再区安装。
pom.xml
[html] view
plain copy
print?
<!-- tomcat7 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<URIEncoding>UTF-8</URIEncoding>
<server>tomcat7x</server>
<username>admin</username>
<password>password</password>
<path>/${project.artifactId}</path>
</configuration>
</plugin>
[html] view
plain copy
print?
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.4.9</version>
<configuration>
<container>
<containerId>tomcat7x</containerId>
<type>remote</type>
</container>
<configuration>
<type>runtime</type>
<properties>
<cargo.tomcat.manager.url>http://localhost:8080/manager/text</cargo.tomcat.manager.url>
<cargo.remote.username>admin</cargo.remote.username>
<cargo.remote.password>password</cargo.remote.password>
</properties>
</configuration>
<deployables>
<deployable>
<groupId>io.steveguoshao</groupId>
<artifactId>webapp</artifactId>
<type>war</type>
<properties>
<context>/${project.artifactId}</context>
</properties>
<!-- 可选:验证是否部署成功 -->
<pingURL>http://localhost:8080/webapp</pingURL>
<!-- 可选:验证超时时间,默认是120000 毫秒-->
<pingTimeout>60000</pingTimeout>
</deployable>
</deployables>
</configuration>
<executions>
<execution>
<id>verify-deployer</id>
<phase>install</phase>
<goals>
<goal>deployer-redeploy</goal>
</goals>
</execution>
<execution>
<id>clean-deployer</id>
<phase>clean</phase>
<goals>
<goal>deployer-undeploy</goal>
</goals>
</execution>
</executions>
</plugin>
在tomcat7的conf/tomcat-users.xml中增加角色和用户, 不然会报403,没法访问
[html] view
plain copy
print?
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<user username="admin" password="password" roles="admin-gui,manager-gui,manager-script,manager-status"/>
另外还有一点要注意的是url,tomcat7是
[html] view
plain copy
print?
http://localhost:8080/manager/text
而tomcat6是
[html] view
plain copy
print?
http://localhost:8080/manager/html
配置好之后就可以运行mvn cargo:redeploy 来部署应用了(必须保证tomcat是running状态,否则没法部署),如果容器中已经部署的当前应用,Cargo会先卸载掉原来的应用,然后再重新部署。
为什么在配置了
[html] view
plain copy
print?
<goal>deployer-undeploy</goal>
的时候,明明刚刚install的时候已经生成了,但是却每次clean都报找不到target目录下war包呢?
3.Cargo插件中各个命令的之间的异同
从上面可以看出,cargo:start于cargo:run的不同之处了吧?cargo:start的生命周期依赖于maven实例的生命周期,也就是说,maven构建成功或者失败之后,cargo插件的生命周期也自动停止了;而cargo:run不同,不管maven是否构建成功或者失败,都必须手工去按Ctrl + C来停止。
参考资料:
1.徐文斌的《Maven实战》
2.http://cargo.codehaus.org/Maven2+Plugin+Reference+Guide
3.http://cargo.codehaus.org/Maven2+plugin
4.http://cargo.codehaus.org/Deploying+to+a+running+container
原文地址:/article/9045795.html
先在settings.xml里面的pluginGroups节点增加<pluginGroup>org.codehaus.cargo</pluginGroup>以便命令行调用,然后增加server
[html] view
plain copy
print?
<server>
<id>tomcat7x</id>
<username>admin</username>
<password>password</password>
</server>
1.部署到本地Web容器
1.1 standalone模式
在standalone模式,Cargo会从Web容器的安装目录复制一份配置到用户指定的目录,然后在此基础上部署应用,每次重新构建的时候,这个目录都会被清空,所有配置被重新生成
[html] view
plain copy
print?
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.4.9</version>
<configuration>
<container>
<containerId>tomcat7x</containerId>
<home>/usr/local/devtools/apache-tomcat-7.0.55</home>
</container>
<configuration>
<type>standalone</type>
<home>${project.build.directory}/tomcat7x</home>
<properties>
<!-- 更改监听端口 -->
<cargo.servlet.port>8088</cargo.servlet.port>
</properties>
</configuration>
</configuration>
</plugin>
然后用mvn cargo:run启动,关于cargo:run于cargo:start有什么区别,后续会讲到。
1.2 existing模式
在existing模式下,用户需要指定现有的web容器配置目录,然后Cargo会直接使用这些配置并将应用部署到其对应的位置
[html] view
plain copy
print?
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.4.9</version>
<configuration>
<container>
<containerId>tomcat7x</containerId>
<home>/usr/local/devtools/apache-tomcat-7.0.55</home>
</container>
<configuration>
<type>existing</type>
<home>/usr/local/devtools/apache-tomcat-7.0.55</home>
</configuration>
</configuration>
</plugin>
然后运行cargo:run之后在对应的tomcat的webapps目录下能够看到被部署的应用
2.部署到远程Web容器
这里注意在远程部署模式下,container元素的type子元素的值必须为remote,如果不指定,Cargo会默认使用installed,并寻找对应的容器安装目录或者安装包,一般我们远程部署的服务器上都有设定好的web容器了,并不需要再区安装。
pom.xml
[html] view
plain copy
print?
<!-- tomcat7 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://localhost:8080/manager/text</url>
<URIEncoding>UTF-8</URIEncoding>
<server>tomcat7x</server>
<username>admin</username>
<password>password</password>
<path>/${project.artifactId}</path>
</configuration>
</plugin>
[html] view
plain copy
print?
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.4.9</version>
<configuration>
<container>
<containerId>tomcat7x</containerId>
<type>remote</type>
</container>
<configuration>
<type>runtime</type>
<properties>
<cargo.tomcat.manager.url>http://localhost:8080/manager/text</cargo.tomcat.manager.url>
<cargo.remote.username>admin</cargo.remote.username>
<cargo.remote.password>password</cargo.remote.password>
</properties>
</configuration>
<deployables>
<deployable>
<groupId>io.steveguoshao</groupId>
<artifactId>webapp</artifactId>
<type>war</type>
<properties>
<context>/${project.artifactId}</context>
</properties>
<!-- 可选:验证是否部署成功 -->
<pingURL>http://localhost:8080/webapp</pingURL>
<!-- 可选:验证超时时间,默认是120000 毫秒-->
<pingTimeout>60000</pingTimeout>
</deployable>
</deployables>
</configuration>
<executions>
<execution>
<id>verify-deployer</id>
<phase>install</phase>
<goals>
<goal>deployer-redeploy</goal>
</goals>
</execution>
<execution>
<id>clean-deployer</id>
<phase>clean</phase>
<goals>
<goal>deployer-undeploy</goal>
</goals>
</execution>
</executions>
</plugin>
在tomcat7的conf/tomcat-users.xml中增加角色和用户, 不然会报403,没法访问
[html] view
plain copy
print?
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<user username="admin" password="password" roles="admin-gui,manager-gui,manager-script,manager-status"/>
另外还有一点要注意的是url,tomcat7是
[html] view
plain copy
print?
http://localhost:8080/manager/text
而tomcat6是
[html] view
plain copy
print?
http://localhost:8080/manager/html
配置好之后就可以运行mvn cargo:redeploy 来部署应用了(必须保证tomcat是running状态,否则没法部署),如果容器中已经部署的当前应用,Cargo会先卸载掉原来的应用,然后再重新部署。
为什么在配置了
[html] view
plain copy
print?
<goal>deployer-undeploy</goal>
的时候,明明刚刚install的时候已经生成了,但是却每次clean都报找不到target目录下war包呢?
3.Cargo插件中各个命令的之间的异同
Goals | Description |
---|---|
cargo:start | Start a container. That goal will: If the plugin configuration requires so, installs the container. If the plugin configuration defines a container with a standalone local configuration, it will create the configuration. If the plugin configuration contains one or more deployables, it will deploy these to the container automatically. If the plugin configuration contains no deployables but the project's packaging is Java EE (WAR, EAR, etc.), it will deploy the project's deployable to to the container automatically. And, of course, start the container. Note: A container that's started with cargo:startwill automatically shut down as soon as the parent Maven instance quits (i.e., you see a BUILD SUCCESSFULor BUILD FAILEDmessage). If you want to start a container and perform manual testing, see our next goal cargo:run. |
cargo:run | Start a container and wait for the user to press CTRL + Cto stop. That goal will: If the plugin configuration requires so, installs the container. If the plugin configuration defines a container with a standalone local configuration, it will create the configuration. If the plugin configuration contains one or more deployables, it will deploy these to the container automatically. If the plugin configuration contains no deployables but the project's packaging is Java EE (WAR, EAR, etc.), it will deploy the project's deployable to to the container automatically. And, of course, start the container and wait for the user to press CTRL + Cto stop. |
cargo:stop | Stop a container. |
cargo:restart | Stop and start again a container. If the container was not running before calling cargo:restart, it will simply be started. |
cargo:configure | Create the configuration for a local container, without starting it. Note that the cargo:startand cargo:rungoals will also install the container automatically (but will not call cargo:install). |
cargo:package | Package the local container. |
cargo:daemon-start | Start a container via the daemon. Read more on: Cargo Daemon Note: The daemon:startgoal is actually equivalent to a restart in CARGO's terms; in the case a container with the same cargo.daemon.handleidalready exists then it will be stopped first before your container is started. This also implies that in the case the new container fails to start, the old one will not be restarted. |
cargo:daemon-stop | Stop a container via the daemon. Read more on: Cargo Daemon |
cargo:deployer-deploy(aliased to cargo:deploy) | Deploy a deployable to a running container. Note: The cargo:startand cargo:rundo already deploy the deployables specified in the configuration to the container; as a result calling cargo:deployfor a container which has been started by CARGO in the same Maven2/Maven3 project will most likely cause a second deployment of the same deployables (and might even fail). |
cargo:deployer-undeploy(aliased to cargo:undeploy) | Undeploy a deployable from a running container. |
cargo:deployer-start | Start a deployable already installed in a running container. |
cargo:deployer-stop | Stop a deployed deployable without undeploying it. |
cargo:deployer-redeploy(aliased to cargo:redeploy) | Undeploy and deploy again a deployable. If the deployable was not deployed before calling cargo:deployer-redeploy(or its alias cargo:redeploy) it will simply be deployed. |
cargo:uberwar | Merge several WAR files into one. |
cargo:install | Installs a container distribution on the file system. Note that the cargo:startgoal will also install the container automatically (but will not call cargo:install). |
cargo:help | Get help (list of available goals, available options, etc.). |
参考资料:
1.徐文斌的《Maven实战》
2.http://cargo.codehaus.org/Maven2+Plugin+Reference+Guide
3.http://cargo.codehaus.org/Maven2+plugin
4.http://cargo.codehaus.org/Deploying+to+a+running+container
原文地址:/article/9045795.html
相关文章推荐
- 机器学习算法笔记2_1:生成学习算法(Generative Learning algorithms)
- GoSublime 快捷键
- GoSublime介绍安装配置
- go beego install
- 十条有用的 GO 技术
- GoLang 并发控制
- goLang 如何设置捕获错误
- GoLang package解释
- goLang 位左移
- gocode 安装
- go time package format 时间格式
- goLang 特殊符号优先级表
- go语言25个关键字总结
- 深入学习golang—channel
- Google Go 学习资源
- Google的深度学习强在哪?谷歌首席科学家说了这些奇妙特性
- 算法Sedgewick第四版-第1章基础-1.4 Analysis of Algorithms-007按位置,找出数组相关最大值
- mongo 2 查询语句
- django Meta
- Google推荐的图片加载库Glide介绍