Kohei Nozaki's blog 

Deploying after integration test with Jenkins


Posted on Wednesday Mar 05, 2014 at 04:09PM in Jenkins


Requirements

  • I want to deploy the production resource after integration test.
  • But some resources are environment-specific.
  • So, after integration test succeeded, I want to replace such resources for production version.

How to achieve it?

  • The deployment job is need to be a parameterized job.
  • After integration test completed, then another mvn starts at post-build step of Jenkins.
    • This mvn does only package goal with no tests.
  • Deployment will be executed by SSH deploy plugin at post-build action of Jenkins.

How to apply this way to a Jenkins job?

  1. Create a parameterized job that can integration-test and deployment be done successfully.
  2. Go to job configuration page
  3. Click “Add post-build step”
  4. Click “Invoke top-level Maven targets”
  5. Select “Run only if build succeeds”
  6. Select Maven Version “Default”
    • Not (Default) which one with enclosed in parentheses. it won't work.
  7. Enter “Goals”
  8. Click “Advanced…”
  9. Enter “POM”, “Properties”.
    • “hogeApp.environmentId=prod” triggers to Maven to include production resources in my pom.xml.
  10. Ensure that there is a post-build action which deploys the artifact to the production environment.
  11. Click “Save” of bottom of the page.

Log

Jenkins job output

...
[INFO] --- maven-failsafe-plugin:2.16:verify (default) @ switch ---
[INFO] Failsafe report directory: /Users/Shared/Jenkins/Home/jobs/SwitchDeploy/workspace/switch/target/failsafe-reports
[JENKINS] テスト結果の記録
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.169s
[INFO] Finished at: Wed Mar 05 16:25:53 JST 2014
[INFO] Final Memory: 22M/318M
[INFO] ------------------------------------------------------------------------
[JENKINS] Archiving /Users/Shared/Jenkins/Home/jobs/SwitchDeploy/workspace/switch/pom.xml to org.nailedtothex/switch/0.0.1-SNAPSHOT/switch-0.0.1-SNAPSHOT.pom
[JENKINS] Archiving /Users/Shared/Jenkins/Home/jobs/SwitchDeploy/workspace/switch/target/switch.war to org.nailedtothex/switch/0.0.1-SNAPSHOT/switch-0.0.1-SNAPSHOT.war
channel stopped
[workspace] $ /Users/kyle/apps/apache-maven-3.1.1/bin/mvn -f switch/pom.xml -Dtag=v0.1 -Dmaven.test.skip=true -DhogeApp.environmentId=prod clean package
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building switch 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ switch ---
[INFO] Deleting /Users/Shared/Jenkins/Home/jobs/SwitchDeploy/workspace/switch/target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ switch ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ switch ---
[INFO] Compiling 1 source file to /Users/Shared/Jenkins/Home/jobs/SwitchDeploy/workspace/switch/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ switch ---
[INFO] Not copying test resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ switch ---
[INFO] Not compiling test sources
[INFO] 
[INFO] --- maven-surefire-plugin:2.16:test (default-test) @ switch ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-war-plugin:2.4:war (default-war) @ switch ---
[INFO] Packaging webapp
[INFO] Assembling webapp [switch] in [/Users/Shared/Jenkins/Home/jobs/SwitchDeploy/workspace/switch/target/switch]
[INFO] Processing war project
[INFO] Copying webapp webResources [/Users/Shared/Jenkins/Home/jobs/SwitchDeploy/workspace/switch/src/main/webapp/_prod] to [/Users/Shared/Jenkins/Home/jobs/SwitchDeploy/workspace/switch/target/switch]
[INFO] Copying webapp resources [/Users/Shared/Jenkins/Home/jobs/SwitchDeploy/workspace/switch/src/main/webapp]
[INFO] Webapp assembled in [46 msecs]
[INFO] Building war: /Users/Shared/Jenkins/Home/jobs/SwitchDeploy/workspace/switch/target/switch.war
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.595s
[INFO] Finished at: Wed Mar 05 16:26:01 JST 2014
[INFO] Final Memory: 15M/245M
[INFO] ------------------------------------------------------------------------
SSH: Connecting from host [kyle-no-MacBook.local]
SSH: Connecting with configuration [osxserver] ...
SSH: EXEC: STDOUT/STDERR from command [/Users/kyle/wildfly-8.0.0.Final/bin/jboss-cli.sh --connect --controller=localhost:49990 --command="deploy switch.war --force"] ...
SSH: EXEC: completed after 3,256 ms
SSH: Disconnecting configuration [osxserver] ...
SSH: Transferred 1 file(s)
Finished: SUCCESS
  • Deployment succeeded as expectedly.
  • After integration-test completed, another mvn was kicked, and it builds the package for production without testing once again.

Check the deployed application

kyle-osxserver:~ kyle$ telnet localhost 48080
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /switch/ HTTP/1.0

HTTP/1.0 200 OK
Connection: close
X-Powered-By: Undertow 1
X-Powered-By: JSP/2.2
Set-Cookie: JSESSIONID=gLpwDJ37tu-Uoxd0r9pWD2wH.kyle-osxserver; path=/switch
Server: Wildfly 8
Content-Type: text/plain;charset=UTF-8
Date: Wed, 05 Mar 2014 07:27:29 GMT

This value came from context-param defined in /src/main/webapp/_prod/WEB-INF/web.xml
This value came from /src/main/resources/common.properties
This value came from /src/main/resources/_prod/env-specific.properties
Connection closed by foreign host.
kyle-osxserver:~ kyle$ 

References

  1. Jenkins executing maven from incorrect path - Stack Overflow
  2. java - Maven packaging without test (skip tests) - Stack Overflow
  3. Jenkins users - pre-build maven step not working with default maven?
  4. [#JENKINS-755] Default JDK meaning in project options is confusing. - Jenkins JIRA