Технический совет № 54 показал, как Arquillianate (Arquillianize?) Существующего проекта Java EE и запускать эти тесты в удаленном режиме, где WildFly работает на известном хосте и порте. Технический совет № 55 показал, как запускать эти тесты, когда WildFly работает в OpenShift. В обоих этих советах использовались профили Maven для разделения соответствующих зависимостей Arquillian в конфигурации «pom.xml» и <container> в «arquillian.xml», чтобы определить, где работает WildFy и как к нему подключаться.
Этот совет покажет, как настроить Jenkins в OpenShift и вызвать эти тесты из Jenkins. Давайте сначала увидим это в действии!
Конфигурация, необходимая для подключения из Jenkins в OpenShift к экземпляру WildFly в OpenShift, аналогична той, которая требуется для подключения с локального компьютера к WildFly в OpenShift. Эта конфигурация указана в «arquillian.xml», и мы можем указать некоторые параметры, которые затем могут быть определены в Jenkins.
На высоком уровне, вот что мы будем делать:
- Используйте код, созданный в Tech Tip # 54 и # 55, и добавьте конфигурацию для Arquillian / Jenkins / OpenShift
- Включить Дженкинс
- Создайте новый экземпляр WildFly Test
- Настройте Jenkins для запуска тестов на экземпляре Test
- Перенесите приложение в производство, только если тесты пройдут на экземпляре теста
Давайте начнем!
-  Удалите существующий исходный код, только каталог src, из репозитория WildFly git, созданного в Tech Tip # 55 .010203040506070809101112131415161718mywildfly> gitrm-rf src/ pom.xmlrm'pom.xml'rm'src/main/java/.gitkeep'rm'src/main/resources/.gitkeep'rm'src/main/webapp/WEB-INF/web.xml'rm'src/main/webapp/images/jbosscorp_logo.png'rm'src/main/webapp/index.html'rm'src/main/webapp/snoop.jsp'mywildfly> git commit . -m"removing source and pom"[master 564b275] removingsourceand pom7 files changed, 647 deletions(-)delete mode 100644 pom.xmldelete mode 100644 src/main/java/.gitkeepdelete mode 100644 src/main/resources/.gitkeepdelete mode 100644 src/main/webapp/WEB-INF/web.xmldelete mode 100644 src/main/webapp/images/jbosscorp_logo.pngdelete mode 100644 src/main/webapp/index.htmldelete mode 100644 src/main/webapp/snoop.jsp
-   Установите новый удаленный репозиторий javaee7-непрерывной доставки :
123456mywildfly> git remote add javaee7 https://github.com/arun-gupta/javaee7-continuous-delivery.gitmywildfly> git remote -vjavaee7 https://github.com/arun-gupta/javaee7-continuous-delivery.git (fetch)javaee7 https://github.com/arun-gupta/javaee7-continuous-delivery.git (push)originssh://54699516ecb8d41cb8000016@mywildfly-milestogo.rhcloud.com/~/git/mywildfly.git/ (fetch)originssh://54699516ecb8d41cb8000016@mywildfly-milestogo.rhcloud.com/~/git/mywildfly.git/ (push)
-   Вытащите код из нового пульта:
01020304050607080910111213141516171819202122232425262728293031mywildfly> git pull javaee7 masterwarning: no common commitsremote: Counting objects: 62,done.remote: Compressing objects: 100% (45/45),done.remote: Total 62 (delta 14), reused 53 (delta 5)Unpacking objects: 100% (62/62),done.From https://github.com/arun-gupta/javaee7-continuous-delivery* branch master -> FETCH_HEAD* [new branch] master -> javaee7/masterMerge made by the'recursive'strategy..gitignore | 6 +++README.asciidoc | 15 ++++++pom.xml | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++src/main/java/org/javaee7/sample/MyApplication.java | 9 ++++src/main/java/org/javaee7/sample/Person.java | 31 ++++++++++++src/main/java/org/javaee7/sample/PersonDatabase.java | 39 ++++++++++++++src/main/java/org/javaee7/sample/PersonResource.java | 29 +++++++++++src/main/webapp/index.jsp | 13 +++++src/test/java/org/javaee7/sample/PersonTest.java | 77 ++++++++++++++++++++++++++++src/test/resources/arquillian.xml | 26 ++++++++++10 files changed, 442 insertions(+)create mode 100644 .gitignorecreate mode 100644 README.asciidoccreate mode 100644 pom.xmlcreate mode 100644 src/main/java/org/javaee7/sample/MyApplication.javacreate mode 100644 src/main/java/org/javaee7/sample/Person.javacreate mode 100644 src/main/java/org/javaee7/sample/PersonDatabase.javacreate mode 100644 src/main/java/org/javaee7/sample/PersonResource.javacreate mode 100644 src/main/webapp/index.jspcreate mode 100644 src/test/java/org/javaee7/sample/PersonTest.javacreate mode 100644 src/test/resources/arquillian.xmlЭто принесет весь исходный код, включая наши конечные точки REST, веб-страницы, тесты, обновленные «pom.xml» и «arquillian.xml». Обновленный «pom.xml» имеет два новых профиля. 0102030405060708091011121314151617181920212223242526272829303132333435363738394041<profile><id>openshift</id><build><plugins><plugin><groupid>org.apache.maven.plugins</groupid><artifactid>maven-war-plugin</artifactid><version>2.3</version><configuration><failonmissingwebxml>false</failonmissingwebxml><outputdirectory>deployments</outputdirectory><warname>ROOT</warname></configuration></plugin></plugins></build></profile><profile><id>jenkins-openshift</id><build><plugins><plugin><artifactid>maven-surefire-plugin</artifactid><version>2.14.1</version><configuration><systempropertyvariables><arquillian.launch>jenkins-openshift</arquillian.launch></systempropertyvariables></configuration></plugin></plugins></build><dependencies><dependency><groupid>org.jboss.arquillian.container</groupid><artifactid>arquillian-openshift</artifactid><version>1.0.0.Final-SNAPSHOT</version><scope>test</scope></dependency></dependencies></profile>Несколько моментов для наблюдения здесь: - Профиль «openshift» используется при создании приложения на OpenShift. Здесь файл WAR приложения создается и развертывается в WildFly.
- Добавлен новый профиль «jenkins-openshift», который будет использоваться экземпляром Jenkins (будет вскоре включен) в OpenShift для запуска тестов.
- Зависимость «arquillian-openshift» такая же, как в Tech Tip # 55, и позволяет запускать тесты Arquillian на экземпляре WildFly в OpenShift.
- Этот профиль относится к конфигурации контейнера «jenkins-openshift», которая будет определена в «arquillian.xml».
 Обновленный файл «src / test / resources / arquillian.xml» содержит следующий контейнер: 0102030405060708091011<containerqualifier="jenkins-openshift"><configuration><propertyname="namespace">${env.ARQ_DOMAIN}</property><propertyname="application">${env.ARQ_APPLICATION}</property><propertyname="libraDomain">rhcloud.com</property><propertyname="sshUserName">${env.ARQ_SSH_USER_NAME}</property><propertyname="login">arungupta@redhat.com</property><propertyname="deploymentTimeoutInSeconds">300</property><propertyname="disableStrictHostChecking">true</property></configuration></container>Эта конфигурация контейнера аналогична той, которая была добавлена в Tech Tip # 55 . Единственная разница здесь в том, что доменное имя, имя приложения и имя пользователя SSH параметризованы. Значение этих свойств определяется в конфигурации экземпляра Jenkins и позволяет запускать тест для отдельного тестового узла. 
-   Еще две вещи нужно сделать, прежде чем изменения будут отправлены в удаленный репозиторий.  Сначала необходимо создать экземпляр WildFly Test, который можно использовать для запуска тестов.  Это может быть легко сделано как показано:
01020304050607080910111213141516171819202122232425262728293031workspaces> rhc app-create mywildflytest jboss-wildfly-8Application Options-------------------Domain: milestogoCartridges: jboss-wildfly-8Gear Size: defaultScaling: noCreating application'mywildflytest'... Artifacts deployed: ./ROOT.wardoneWildFly 8 administrator added. Pleasemakenote of these credentials:Username: adminITJt7YhPassword: yXP2mUd1w4_8run'rhc port-forward mywildflytest'to access the web admin area on port 9990.Waitingforyour DNS name to be available ...doneCloning into'mywildflytest'...Warning: Permanently added the RSA host keyforIP address'54.205.69.88'to the list of known hosts.Your application'mywildflytest'is now available.URL: http://mywildflytest-milestogo.rhcloud.com/SSH to: 546e3743ecb8d49ca9000014@mywildflytest-milestogo.rhcloud.comGit remote:ssh://546e3743ecb8d49ca9000014@mywildflytest-milestogo.rhcloud.com/~/git/mywildflytest.git/Cloned to:/Users/arungupta/workspaces/javaee7/mywildflytestRun'rhc show-app mywildflytest'formoredetails about your app.Обратите внимание, что доменом является milestogo, имя приложения —mywildflytest, а имя пользователя SSH —546e3743ecb8d49ca9000014. Они будут переданы Arquillian для проведения тестов.
-   Второе — включить и настроить Jenkins. В консоли OpenShift выберите приложение «mywildfly» и нажмите ссылку «Включить Jenkins», как показано ниже:
Помните, что это не ваш экземпляр Test, потому что весь исходный код живет в ранее созданном экземпляре. Укажите соответствующее имя, например, jenkins-milestogo.rhcloud.com в моем случае, и нажмите кнопку «Добавить Jenkins». Это обеспечит наличие экземпляра Jenkins, если его там еще нет, а также настроит проект со сценарием для построения и развертывания приложения. Запишите имя и пароль. 
-   Используйте учетные данные для входа в свой экземпляр Jenkins. Выберите соответствующую сборку «mywildfly-build» в этом случае.  Прокрутите вниз до раздела «Сборка» и добавьте следующий скрипт сразу после «# Выполнить тесты здесь» в оболочке «Выполнение»:
1234exportARQ_DOMAIN=milestogoexportARQ_SSH_USER_NAME=546e3743ecb8d49ca9000014exportARQ_APPLICATION=mywildflytestmvntest-Pjenkins-openshiftНажмите «Сохранить», чтобы сохранить конфигурацию. Это позволит запускать тесты Arquillian на экземпляре Test. Если тесты пройдены, приложение будет развернуто. Если тесты не пройдены, ни один из шагов после этого шага не будет выполнен, и приложение не будет развернуто. 
-   Теперь давайте перенесем изменения в удаленное репо:
01020304050607080910111213141516171819mywildfly> git pushCounting objects: 68,done.Delta compression using up to 8 threads.Compressing objects: 100% (49/49),done.Writing objects: 100% (61/61), 8.85 KiB | 0 bytes/s,done.Total 61 (delta 14), reused 0 (delta 0)remote: Executing Jenkins build.remote:remote: You can track your build at https://jenkins-milestogo.rhcloud.com/job/mywildfly-buildremote:remote: Waitingforbuild to schedule............................................................................................Doneremote: Waitingforjob to complete................................................................................................................................................................................................................................................................................................................................................................................................Doneremote: SUCCESSremote: New build has been deployed.remote: -------------------------remote: Git Post-Receive Result: successremote: Deployment completed with status: successTossh://546cef93ecb8d4ff37000003@mywildfly-milestogo.rhcloud.com/~/git/mywildfly.git/e8f6c61..e9ad206 master -> masterКоличество точек указывает на ожидание конкретной задачи и, скорее всего, будет варьироваться для разных запусков. И консоль Jenkins ( jenkins-milestogo.rhcloud.com/job/mywildfly-build/1/console ) отображает вывод в виде: 01020304050607080910111213141516171819202122232425262728293031323334353637383940414243444546474849-------------------------------------------------------T E S T S-------------------------------------------------------Running org.javaee7.sample.PersonTestNov 20, 2014 2:54:56 PM org.jboss.arquillian.container.openshift.OpenShiftContainer startINFO: Preparing Arquillian OpenShift container at http://mywildflytest-milestogo.rhcloud.comNov 20, 2014 2:55:48 PM org.jboss.arquillian.container.openshift.OpenShiftRepository pushINFO: Pushed to the remote repositoryssh://546e3743ecb8d49ca9000014@mywildflytest-milestogo.rhcloud.com/~/git/mywildflytest.git/Nov 20, 2014 2:56:37 PM org.jboss.arquillian.container.openshift.OpenShiftRepository pushINFO: Pushed to the remote repositoryssh://546e3743ecb8d49ca9000014@mywildflytest-milestogo.rhcloud.com/~/git/mywildflytest.git/Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 103.056 secNov 20, 2014 2:56:37 PM org.jboss.arquillian.container.openshift.OpenShiftContainer stopINFO: Shutting down Arquillian OpenShift container at http://mywildflytest-milestogo.rhcloud.comResults :Tests run: 2, Failures: 0, Errors: 0, Skipped: 0[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Totaltime: 3:13.069s[INFO] Finished at: Thu Nov 20 14:57:34 EST 2014[INFO] Final Memory: 10M/101M[INFO] ------------------------------------------------------------------------+/usr/libexec/openshift/cartridges/jenkins/bin/git_ssh_wrapper.sh 546e36e5e0b8cd4e2a000007@mywildfly-milestogo.rhcloud.com'gear stop --conditional'Warning: Permanently added'mywildfly-milestogo.rhcloud.com,10.5.171.43'(RSA) to the list of known hosts.Stopping gear...Stopping wildfly cartSending SIGTERM to wildfly:418673 ...+rsync--delete-after -azO -e/usr/libexec/openshift/cartridges/jenkins/bin/git_ssh_wrapper.sh/var/lib/openshift/546e46304382ec3f29000012//.m2/'546e36e5e0b8cd4e2a000007@mywildfly-milestogo.rhcloud.com:~/.m2/'Warning: Permanently added'mywildfly-milestogo.rhcloud.com,10.5.171.43'(RSA) to the list of known hosts.+rsync--delete-after -azO -e/usr/libexec/openshift/cartridges/jenkins/bin/git_ssh_wrapper.sh/var/lib/openshift/546e46304382ec3f29000012/app-root/runtime/repo/deployments/'546e36e5e0b8cd4e2a000007@mywildfly-milestogo.rhcloud.com:${OPENSHIFT_REPO_DIR}deployments/'Warning: Permanently added'mywildfly-milestogo.rhcloud.com,10.5.171.43'(RSA) to the list of known hosts.+rsync--delete-after -azO -e/usr/libexec/openshift/cartridges/jenkins/bin/git_ssh_wrapper.sh/var/lib/openshift/546e46304382ec3f29000012/app-root/runtime/repo/.openshift/'546e36e5e0b8cd4e2a000007@mywildfly-milestogo.rhcloud.com:${OPENSHIFT_REPO_DIR}.openshift/'Warning: Permanently added'mywildfly-milestogo.rhcloud.com,10.5.171.43'(RSA) to the list of known hosts.+/usr/libexec/openshift/cartridges/jenkins/bin/git_ssh_wrapper.sh 546e36e5e0b8cd4e2a000007@mywildfly-milestogo.rhcloud.com'gear remotedeploy'Warning: Permanently added'mywildfly-milestogo.rhcloud.com,10.5.171.43'(RSA) to the list of known hosts.Preparing buildfordeploymentDeploymentidis dff28e58Activating deploymentDeploying WildFlyStarting wildfly cartFound 127.12.255.129:8080 listening portFound 127.12.255.129:9990 listening port/var/lib/openshift/546e36e5e0b8cd4e2a000007/wildfly/standalone/deployments/var/lib/openshift/546e36e5e0b8cd4e2a000007/wildfly/var/lib/openshift/546e36e5e0b8cd4e2a000007/wildflyCLIENT_MESSAGE: Artifacts deployed: ./ROOT.warArchiving artifactsFinished: SUCCESSФайлы журнала для Jenkins можно просмотреть, как показано на рисунке: 0102030405060708091011121314151617181920212223242526272829Nov 20, 2014 2:51:11 PM hudson.plugins.openshift.OpenShiftCloud provisionINFO: Provisioning new nodeforworkload = 2 and label = mywildfly-buildindomain milestogoNov 20, 2014 2:51:11 PM hudson.plugins.openshift.OpenShiftCloud getOpenShiftConnectionINFO: Initiating Java Client Service - ConfiguredforOpenShift Server https://openshift.redhat.comNov 20, 2014 2:51:11 PM com.openshift.internal.client.RestService requestINFO: Requesting GET with protocol 1.2 on https://openshift.redhat.com/broker/rest/apiNov 20, 2014 2:51:11 PM com.openshift.internal.client.RestService requestINFO: Requesting GET with protocol 1.2 on https://openshift.redhat.com/broker/rest/userNov 20, 2014 2:51:11 PM com.openshift.internal.client.RestService request. . .INFO: Checking availability of computer hudson.plugins.openshift.OpenShiftSlave@8ce21115Nov 20, 2014 2:53:35 PM com.openshift.internal.client.RestService requestINFO: Requesting GET with protocol 1.2 on https://openshift.redhat.com/broker/rest/domain/milestogo/application/mywildflybldr/gear_groupsNov 20, 2014 2:53:35 PM hudson.plugins.openshift.OpenShiftComputerLauncher launchINFO: Checking SSH access to application mywildflybldr-milestogo.rhcloud.comNov 20, 2014 2:53:35 PM hudson.plugins.openshift.OpenShiftComputerLauncher launchINFO: Connecting via SSH'546e46304382ec3f29000012''mywildflybldr-milestogo.rhcloud.com''/var/lib/openshift/546e393e5973ca0492000070/app-root/data/.ssh/jenkins_id_rsa'Nov 20, 2014 2:53:35 PM hudson.slaves.NodeProvisioner updateINFO: mywildfly-build provisioningE successfully completed. We have now 2 computer(s)Nov 20, 2014 2:53:35 PM hudson.plugins.openshift.OpenShiftComputerLauncher launchINFO: Connected via SSH.Nov 20, 2014 2:53:35 PM hudson.plugins.openshift.OpenShiftComputerLauncher launchINFO: Execmkdir-p $OPENSHIFT_DATA_DIR/jenkins&&cd$OPENSHIFT_DATA_DIR/jenkins&&rm-f slave.jar && wget -q --no-check-certificate https://jenkins-milestogo.rhcloud.com/jnlpJars/slave.jarNov 20, 2014 2:53:42 PM hudson.plugins.openshift.OpenShiftComputerLauncher launchINFO: Slave connected.Nov 20, 2014 2:58:24 PM hudson.model.Run executeINFO: mywildfly-build#1 main build action completed: SUCCESSЭто показывает, что приложение было успешно развернуто на mywildfly-milestogo.rhcloud.com/index.jsp и выглядит примерно так: 
Теперь измените «src / main / webapp / index.jsp», чтобы показать другой заголовок. И измените «src / test / java / org / javaee7 / sample / PersonTest.java», чтобы один из тестов не прошел. Выполнение «git commit» и «git push» показывает следующие результаты в командной строке:
| 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | mywildfly> git commit . -m"breaking the test"[master ff2de09] breaking the test 2 files changed, 2 insertions(+), 2 deletions(-)mywildfly> git pushCounting objects: 23, done.Delta compression using up to 8 threads.Compressing objects: 100% (8/8), done.Writing objects: 100% (12/12), 771 bytes | 0 bytes/s, done.Total 12 (delta 5), reused 0 (delta 0)remote: Executing Jenkins build.remote: remote: You can track your build at https://jenkins-milestogo.rhcloud.com/job/mywildfly-buildremote: remote: Waiting forbuild to schedule.......Doneremote: Waiting forjob to complete.....................................................................................................................................................................Doneremote: FAILEDremote: !!!!!!!!remote: Deployment Halted!remote: If the build failed before the deploy step, your previousremote: build is still running.  Otherwise, your application may beremote: partially deployed or inaccessible.remote: Fix the build and try again.remote: !!!!!!!!remote: An error occurred executing 'gear postreceive'(exitcode: 1)remote: Error message: CLIENT_ERROR: Failed to execute: 'control post-receive'for/var/lib/openshift/546e36e5e0b8cd4e2a000007/jenkins-clientremote: remote: For moredetails about the problem, try running the commandagain with the '--trace'option.To ssh://546e36e5e0b8cd4e2a000007@mywildfly-milestogo.rhcloud.com/~/git/mywildfly.git/   d618fad..ff2de09  master -> master | 
Ключевое утверждение, на которое следует обратить внимание, заключается в том, что развертывание прекращается после сбоя тестов. И вы можете убедиться в этом, посетив mywildfly-milestogo.rhcloud.com/index.jsp и убедившись, что обновленный «index.jsp» не виден.
Одним словом, тесты проходят, сайт обновляется. И тесты не пройдены, сайт не обновляется. Итак, вы создали простой конвейер развертывания для Java EE 7 с использованием WildFly, OpenShift, Arquillian и Jenkins!
| Ссылка: | Конвейер развертывания для Java EE 7 с WildFly, Arquillian, Jenkins и OpenShift от нашего партнера по JCG Аруна Гупта из блога Miles to go 2.0… . | 

