Статьи

Автоматизированное развертывание с Cargo и Maven — краткий учебник

Cargo — это универсальная библиотека, которая позволяет вам управлять и развертывать приложения на различных серверах приложений. В этой статье мы рассмотрим, как использовать Cargo с Maven.

Если вы начинаете с нуля, вы можете использовать Archetype для создания веб-приложения с поддержкой Cargo:

mvn archetype:create -DarchetypeGroupId=org.codehaus.cargo 
-DarchetypeArtifactId=cargo-archetype-webapp-single-module 
-DgroupId=com.wakaleo -DartifactId=ezbank

Или же это легко добавить к существующей конфигурации — просто добавьте плагин cargo-maven2 в ваш файл pom.

Конфигурация по умолчанию развернет приложение на встроенном сервере Jetty:

<plugin>
  <groupId>org.codehaus.cargo</groupId>
  <artifactId>cargo-maven2-plugin</artifactId>
  <version>1.0</version>
</plugin>

Тогда просто запустите mvn cargo: старт .

Однако Cargo предназначен для развертывания и не поддерживает быструю разработку жизненного цикла — используйте для этого обычный плагин Jetty.

Развертывание в экземпляре Tomcat

Вы можете запустить свои интеграционные тесты на сервере Tomcat, который Cargo будет инициализировать и настраивать по этому случаю — это называется «автономным» режимом:

<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.0</version>
<configuration>
<!-- Container configuration -->
<container>
<containerId>tomcat6x</containerId>
<home>/usr/local/apache-tomcat-6.0.18</home>
</container>
<configuration>
<type>standalone</type>
<home>target/tomcat6x</home>
</configuration>
</configuration>
</plugin>

Cargo создаст базовый каталог (например, CATALINA_BASE) в указанном вами каталоге. Он будет использовать предоставленный вами домашний каталог Tomcat. При каждой установке Cargo будет уничтожать и воссоздавать базовый каталог.

При необходимости вы также можете загрузить и установить установку Tomcat, используя элемент:

<zipUrlInstaller>
<url>http://www.orionserver.com/distributions/orion2.0.5.zip</url>
<installDir>${java.io.tmpdir}/cargoinstalls</installDir>
</zipUrlInstaller>

Это более портативное решение, которое полезно для интеграционных тестов.

Выполнение интеграционных тестов с Cargo

Вы можете использовать Cargo для автоматического запуска веб-сервера для запуска интеграционных тестов. Это означает, что вы можете запустить свои интеграционные тесты на любом из поддерживаемых серверов (Tomcat, Jetty, JBoss, Weblogic, …):

<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>start-container</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
</execution>
<execution>
<id>stop-container</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
<configuration>
<wait>false</wait>
<!-- Container configuration -->
<container>
<containerId>tomcat6x</containerId>
<home>/usr/local/apache-tomcat-6.0.18</home>
</container>
<configuration>
<type>standalone</type>
<home>target/tomcat6x</home>
</configuration>
</configuration>
</plugin>

 

Развертывание на существующем сервере

Вы также можете выполнить развертывание на работающем сервере приложений. Вам необходимо использовать «существующий» тип конфигурации (существующий). Вы можете использовать отдельный профиль для запуска интеграционных тестов в автономном экземпляре, а затем развернуть его в работающем экземпляре.

<profiles>
<profile>
<id>integration</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.0</version>
<configuration>
<!-- Container configuration -->
<container>
<containerId>tomcat6x</containerId>
</container>
<configuration>
<type>existing</type>
<home>/usr/local/apache-tomcat-6.0.18</home>
</configuration>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
...

 

Затем вы можете развернуть свое приложение, как показано здесь:

$ mvn install

$ mvn cargo:deploy -Pintegration

Развертывание на удаленном сервере

Вы также можете выполнить развертывание на удаленном сервере, используя серверный удаленный API (например, приложение HTML-менеджер для Tomcat). Вам необходимо настроить контейнер типа «remote» и конфигурацию типа «runtime»:

<configuration>
<!-- Container configuration -->
<container>
<containerId>tomcat6x</containerId>
<type>remote</type>
</container>
<configuration>
<type>runtime</type>
<properties>
<cargo.remote.username>admin</cargo.remote.username>
<cargo.remote.password></cargo.remote.password>
<cargo.tomcat.manager.url>http://localhost:8888/manager</cargo.tomcat.manager.url>
</properties>
</configuration>
...
</configuration>

В разделе <properties> вы определяете специфичные для сервера свойства (см. Документацию Cargo). Затем вы используете Cargo как обычно:

$ mvn cargo:redeploy -o 
...
[INFO] [cargo:redeploy]
[INFO] [mcat6xRemoteDeployer] Redeploying [/Users/johnsmart/.m2/repository/org/ebank/
ebank-web/1.0.0-SNAPSHOT/ebank-web-1.0.0-SNAPSHOT.war]
[INFO] [mcat6xRemoteDeployer] Undeploying [/Users/johnsmart/.m2/repository/org/ebank/
ebank-web/1.0.0-SNAPSHOT/ebank-web-1.0.0-SNAPSHOT.war]
[INFO] [mcat6xRemoteDeployer] Deploying [/Users/johnsmart/.m2/repository/org/ebank/
ebank-web/1.0.0-SNAPSHOT/ebank-web-1.0.0-SNAPSHOT.war]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4 seconds
[INFO] Finished at: Fri Jul 17 17:45:34 CEST 2009
[INFO] Final Memory: 6M/12M
[INFO] ------------------------------------------------------------------------

Использование выделенного модуля развертывания

Вы можете отделить процесс сборки от процесса развертывания приложения, создав отдельный модуль Maven, предназначенный для развертываний. Это также упрощает создание и развертывание файла WAR в Nexus на одном сервере, а затем развертывание на сервере приложений непосредственно на целевом компьютере.

Для этого вы создаете выделенный модуль Maven. Он должен содержать только плагин Cargo и зависимость от развертываемого приложения. Плагин Cargo использует этот раздел для получения файла WAR, который будет развернут из вашего хранилища Nexus.

<project>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.0</version>
<configuration>
<!-- Container configuration -->
<container>
<containerId>tomcat6x</containerId>
</container>
<configuration>
<type>existing</type>
<home>/usr/local/apache-tomcat-6.0.18</home>
</configuration>
<deployer>
<deployables>
<deployable>
<artifactId>ebank-web</artifactId>
<groupId>org.ebank</groupId>
<type>war</type>
</deployable>
</deployables>
</deployer>
</configuration>
</plugin>
</plugins>
</build>

Раздел зависимостей содержит ссылку на файл WAR для развертывания. Здесь вы можете использовать свойство, чтобы передавать номер версии из командной строки:

 ...
<dependencies>
<dependency>
<groupId>org.ebank</groupId>
<artifactId>ebank-web</artifactId>
<type>war</type>
<version>${target.version}</version>
</dependency>
</dependencies>

<properties>
<target.version>${project.version}</target.version>
</properties>

 

С  http://weblogs.java.net/blog/johnsmart