Как использовать hudson + maven + cargo для развертывания приложения на сервере jboss?

Я хотел бы использовать hudson с плагином maven для развертывания приложения на сервере Jboss 6 следующим образом:

  1. Хадсон называет задачи чистой установки maven
  2. В файле pom.xml определен плагин Cargo (версия 1.0.6)
  3. Плагин Cargo определил повторное развертывание выполнения для фазы установки с остановкой и запуском целей (в этом порядке)

Все работает нормально - проект очищается и затем устанавливается, затем сервер jboss останавливается (с помощью Cargo: stop) и снова запускается (с помощью cargo: start). Во время старта цель - война с моим проектом, развернутым на jboss. Когда я тестирую свою сеть, она работает, и все изменения присутствуют.

Единственная проблема заключается в том, что после запуска сервера Jboss maven не завершает свое выполнение успешно, потому что показывает сообщение «[ИНФОРМАЦИЯ] Нажмите Ctrl-C, чтобы остановить контейнер ...» и ожидает нажатия Ctrl-C. Это стандартное поведение Cargo: start. В результате работа Хадсона не заканчивается успешно.

То, что я сейчас прошу, - это своего рода обходной путь для этой маленькой проблемы. Мне нужно много времени (около 16 часов), чтобы добраться до этого состояния, и я не был бы рад, если бы мне пришлось его полностью переработать.

Мои идеи, как это могло пройти (но я не смог гуглить ничего полезного):

  • заставить Хадсона запускать задачу maven в фоновом режиме
  • заставить Cargo запускать jboss в фоновом режиме (некоторый порождение, вилка, параметр jvm, аргумент времени выполнения jboss)
  • заставить maven запускать задачу в фоновом режиме

Причина, по которой я пробовал это решение, заключается в том, что я хочу, чтобы jboss работал постоянно на сервере, а вариант удаленного развертывания Cargo мне не подходит, потому что он использует слишком много системных ресурсов. Это решение должно быть подходящим для установки проекта и последующего перезапуска сервера (стоп - запуск).

Спасибо за любую помощь. Вот моя конфигурация грузового плагина:

<plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <version>1.0.6</version>
            <configuration>
                <container>
                    <containerId>jboss6x</containerId>
                    <append>false</append>
                    <timeout>300000</timeout>
                    <home>/atteq/jboss</home>
                </container>
                <configuration>
                    <properties>
                        <cargo.servlet.port>8080</cargo.servlet.port>
                        <cargo.jboss.configuration>atteq-minimal</cargo.jboss.configuration>
                        <cargo.logging>high</cargo.logging>
                        <cargo.rmi.port>1099</cargo.rmi.port>
                        <cargo.jvmargs>-XX:PermSize=512m -XX:MaxPermSize=1024
                        -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled
                        -XX:+CMSClassUnloadingEnabled</cargo.jvmargs>
                        <cargo.runtime.args>--host 0.0.0.0</cargo.runtime.args>

                    </properties>
                        <type>existing</type>
                    <home>/atteq/jboss/server/atteq-minimal</home>
                <deployables>
                    <deployable>
                        <groupId>roztocto</groupId>
                        <artifactId>roztocto</artifactId>
                        <type>war</type>
                    </deployable>
                </deployables>

                    </configuration>
                </configuration>
            <executions>
                <execution>
                    <id>redeploy</id>
                    <phase>install</phase>
                    <goals>
                        <goal>stop</goal>
                        <goal>start</goal>
                    </goals>
                </execution>
            </executions> 
            <dependencies>
                    <dependency>
                        <groupId>org.codehaus.cargo</groupId>
                        <artifactId>cargo-core-tools-jboss-deployer-5.1-and-onwards</artifactId>
                        <version>1.0.6</version>
                    </dependency>
                <dependency>
                    <groupId>org.jboss.jbossas</groupId>
                    <artifactId>jboss-as-profileservice-client</artifactId>
                    <version>6.0.0.Final</version>
                    <type>pom</type>
                </dependency>

                    <dependency>
                        <groupId>org.jboss.profileservice</groupId>
                        <artifactId>jboss-profileservice-spi</artifactId>
                        <version>0.2.2</version>
                    </dependency>

                    <dependency>
                        <groupId>org.jboss.jbossas</groupId>
                        <artifactId>jboss-as-client</artifactId>
                        <version>6.0.0.Final</version>
                        <type>pom</type>
                    </dependency>
            </dependencies>

        </plugin>

person Lubbo    schedule 31.01.2011    source источник
comment
Вы нашли решение этой проблемы? Я тоже пытаюсь добиться того же.   -  person Sahil    schedule 03.03.2011


Ответы (2)


Как насчет того, чтобы установить для свойства <wait> значение true? Согласно документам

<wait>  Decides if Cargo should wait after the container is 
            started or not                                   Defaults to true 
person Raghuram    schedule 31.01.2011
comment
Выглядит хорошо, но это не так - когда вы устанавливаете ‹wait› в значение false, контейнер запускается, а затем останавливается (он не дожидается остановки Ctrl-c, он останавливается немедленно). Мне нужно, чтобы мой контейнер (jboss) продолжал работать после запуска. - person Lubbo; 31.01.2011
comment
убедитесь, что параметр ожидания указан в правильном месте. В вашем примере попробуйте добавить это так: ... ‹configuration› ‹wait› true ‹/wait› ‹container› ... - person redochka; 07.11.2011

Hudson отслеживает все запущенные процессы и не считает сборку завершенной, пока все они не завершатся. Я не знаком с грузом, но вот мои заметки из моего опыта с Гудзоном. Чтобы получить процесс через сеть мониторинга, вам может потребоваться:

  • Запускаем JBoss в фоновом режиме
  • Установите для переменной среды -Dhudson.util.ProcessTreeKiller.disable значение true в конфигурации Hudson.
  • Установите BUILD_ID = dontKillMe как переменную среды оболочки

Посетите вики-страницу Hudson здесь. Или вики-страницу Jenkins здесь.

Дженкинс и Хадсон - одно и то же, но две стороны недавнего раскола. Я позволю вам прочитать подробности из группы Jenkins и Группа Oracle Hudson. Изменить: также вопрос SO Как выбрать между Хадсоном и Дженкинсом?

person Adam    schedule 27.04.2011