Real-World Strategies for Continuous Delivery          with Maven and Jenkins                          John Ferguson Smart
Consulta                    nt            Trainer           Mentor           Author          Speaker          CoderJohn Fe...
Continuous Delivery Getting value to the business.             Fast.                       3
But what is Continuous Delivery?     A build tool?                     A CI tool?                      Automated tests?   ...
Yes...and No
Continuous Delivery is an attitude
Deliver business value more frequently
Value can also come in the form of fast feedback
Give power back to the business
The ‘eternal beta’ strategy
Principles of Continuous        Delivery
Principle #1Every build is a potential release
Principle #2Eliminate manual bottlenecks
Principle #3Automate wherever possible
Principle #4Have automated tests you can           trust
Build PipelinesThe conveyer belts of Continuous Delivery
Compile and unit test Package and deploy                        DEV  Acceptance tests   Deploy to QA               QA Depl...
Compile and unit testEach commit is a potential release    Package and deploy                                     DEV     ...
Compile and unit test          Package and deploy                                 DEV           Acceptance testsWe reuse t...
Compile and unit test                Package and deploy                                                  DEV              ...
Compile and unit test     Package and deploy                            DEV      Acceptance testsAutomated, repeatable    ...
Continuous Delivery with Maven      Why does it have to be so hard?!
The Maven lifecycle          compile        test-compile             test          package       integration-test         ...
The Maven lifecycleCompile and unit test    mvn test        compile                                       test-compile    ...
The Maven lifecycleCompile and unit test   mvn test       compile                                     test-compile        ...
The Maven Release Process              1.0.0-SNAPSHOT              1.0.0-SNAPSHOT                           mvn release   ...
The Maven Release Process              mvn release:prepare• Check that there are no uncommitted changes in the sources• Ch...
The Maven Release Process       mvn release:prepare  compiletest-compile     test    package          1.0.0 integration-te...
The Maven Release Process mvn release:perform                    compile                  test-compile                    ...
The Maven Release ProcessMaven: You build a new release whena snapshot build is good enough                          Conti...
Options?Make Maven work for you
Beware duplication!Build and unit test           mvn test    Integration tests                mvn verify      Code coverag...
Minimize build jobs for the main build      Default build            mvn install                       compile            ...
Split unit and integration tests                <plugin>                     <groupId>org.apache.maven.plugins</groupId>  ...
Split unit and integration tests                <groupId>org.apache.maven.plugins</groupId>                            <pl...
Split unit and integration tests                      <plugin>                           <groupId>org.apache.maven.plugins...
Split unit and integration tests                      <plugin>                           <groupId>org.apache.maven.plugins...
CompileDefault build                       Unit Test       mvn deploy                       Package                    Int...
CompileDefault build                                      Unit Test      mvn install                                      ...
CompileDefault build                            Unit Test      mvn install                            Package             ...
Eliminate waste
Run code coverage with the integration tests                                            compile                           ...
JACOCOJava Code Coverage Code coverage on the flyDoesn’t mess with your JAR files
Run code coverage with the integration tests<plugin>    <groupId>org.jacoco</groupId>    <artifactId>jacoco-maven-plugin</...
 	  	  	  	  	  <plugin>Run code coverage with the integration tests	  	  	  	  	  	  	  	  <groupId>org.jacoco</groupId>	...
Run code coverage with the integration testsIntegration tests/test                        compile                         ...
Minimal overheadBuild Time             Normal build   With JaCoCo
Reuse binaries wherever possible   Default build                                   1.0.203Deploy to TESTAcceptance Tests  ...
Have a separate acceptance test suite    Acceptance Tests                                    TEST                         ...
Take code quality seriously                        Checkstyle             Findbugs
Take code quality seriouslyCode quality metrics            mvn site
Take code quality seriously                         Pick and choose your metricsCode quality metrics        mvn pmd:check ...
Avoid the Maven Release PluginDon’t sweat the version numbers
Developers always work on a SNAPSHOT version                  1.0-SNAPSHOT                   This number is pretty arbitrary
Jenkins sets a release candidate version at the           start of the build pipeline                   1.0-SNAPSHOT      ...
This version goes through the build pipeline                   1.0.203                  Unit tests              Acceptance...
This version goes through the build pipeline                   1.0.203                     1.0.204                       1...
Create a new release branch                  Update the version number                  Build and test release candidate  ...
Create a new release branch                  Update the version number                  Build and test release candidate 1...
Create a new release branch                  Update the version number                                   Versions Plugin  ...
Create a new release branch                  Update the version number                  Build and test release candidate  ...
And make it visible            The Build Pipeline plugin
Let’s see it in action!                 TEST                        UAT                              PROD       Jenkins
Let’s see it in action!
initial-build code-qualitydeploy-to-test                  acceptance-testsdeploy-to-uat                 acceptance-testsde...
initial-build code-qualitydeploy-to-test                  acceptance-testsdeploy-to-uat                 acceptance-testsde...
initial-build         Links to binary artifacts in ArtifactoryRelease candidate number
initial-buildLinks to binary artifacts in Artifactory
initial-build   Use a parameterized build to   configure the major build version    Users can override the default    majo...
initial-build                Create a new branchUpdate the version in the pom files       Build the binaries
initial-build       Conditional build step plugin          If the build succeeds...   Commit the changes and push   the br...
initial-build                If the build fails...         Delete the branch
initial-buildDeploy the release candidate to Artifactory
initial-build       Deploy to the test environment                     Target platform
initial-build<plugin>    <groupId>com.jelastic</groupId>    <artifactId>jelastic-maven-plugin</artifactId>    <version>1.6...
initial-build                 Archive binaryUpdate the build description
initial-build                 Archive binaryPass the release branch to the next build job
initial-buildDon’t start a new build pipeline ifone is currently running.
initial-build code-qualitydeploy-to-test                  acceptance-testsdeploy-to-uat                 acceptance-testsde...
initial-build             code-qualityPass in the release we want to build against           deploy-to-test               ...
initial-build      code-quality     deploy-to-testBuild from the release candidate branch                        acceptanc...
initial-build code-qualitydeploy-to-test                  acceptance-testsdeploy-to-uat                 acceptance-testsde...
initial-build     code-qualityCopy the WAR file from the initial build   deploy-to-test                      acceptance-te...
initial-build code-qualitydeploy-to-test                  acceptance-testsdeploy-to-uat          ...deploy this WAR file  ...
initial-build code-qualitydeploy-to-test                  acceptance-testsdeploy-to-uat                 acceptance-testsde...
initial-build                   code-quality                  deploy-to-test                                    acceptance...
initial-build                   code-quality                  deploy-to-test                                    acceptance...
initial-build code-qualitydeploy-to-test                  acceptance-testsdeploy-to-uat                 acceptance-testsde...
initial-build                   code-quality                  deploy-to-test                                    acceptance...
initial-build                   code-quality                  deploy-to-test                                    acceptance...
initial-build   code-quality  deploy-to-test                    acceptance-tests  deploy-to-uatBuild promotion status     ...
initial-buildCopy the WAR file from the initial build...                 code-quality                deploy-to-test       ...
A build promotioninitial-build deploy to production                  process to                 code-quality              ...
A build promotioninitial-build deploy to production                  process to                 code-quality              ...
Build pipeline for an overview of the process
Thank You                     John	  Ferguson	  Smart      Email:	  john.smart@wakaleo.com       Web:	  hHp://www.wakaleo....
Upcoming SlideShare
Loading in...5
×

Continuous delivery-with-maven

37,195

Published on

Maven is close to ubiquitous in the world of enterprise Java, and the Maven dependency ecosystem is the de facto industry standard. However, the traditional Maven build and release strategy, based on snapshot versions and carefully planned releases, is difficult to reconcile with modern continuous delivery practices, where any commit that passes a series of quality-control gateways can qualify as a release. How can teams using the standard Maven release process still leverage the benefits of continuous delivery? This presentation discusses strategies that can be used to implement continuous delivery solutions with Maven and demonstrates one such strategy using Maven, Jenkins, and Git.

5 Comments
125 Likes
Statistics
Notes
  • Where can we find video of this presentation? The given link https://oracleus.activeevents.com/connect/sessionDetail.ww?SESSION_ID=2822 is not working.
    Thanks
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • A very good real life example about how to implement a working build pipeline. I've got a view quistions though..
    I unterstand that setting the version within the jenkins build is neccessary in order not to commit to trunk after a successful build, whic would retrigger the build pipeline eventually. Having that in mind, git is very comfortable. unfortunately I'm using svn, which seem to make a different approach maybe with other tools mandatory. Do you have some tips or thought about this?

    What I still don't like about the pipeline concept and that it drops the concept of snapshot-versions, is that every commit creates a new version jar in my artifactory. This tends to consume much space on the server. This is good and neccessary if you deploy every little change directly and fully automatically. But for me a weekly deployment is fully satisfying.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • What is the configuration of gol-deploy-to-prod ?
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • I prepared a template project on bitbucket http://bitbucket.org/rlogiacco/atdd, may be it is going to be useful
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • This is perfect, but I want to suggest to use the maven-failsafe-plugin to run your integration tests rather than surefire to help developers run integration tests when needed: this way you can use the cargo plugin to start and stop the container on the developer machine before and after the tests are executed having an automation for developers as well for Jenkins.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
37,195
On Slideshare
0
From Embeds
0
Number of Embeds
26
Actions
Shares
0
Downloads
1,164
Comments
5
Likes
125
Embeds 0
No embeds

No notes for slide

Transcript of "Continuous delivery-with-maven"

  1. 1. Real-World Strategies for Continuous Delivery with Maven and Jenkins John Ferguson Smart
  2. 2. Consulta nt Trainer Mentor Author Speaker CoderJohn Fer guson S mar t
  3. 3. Continuous Delivery Getting value to the business. Fast. 3
  4. 4. But what is Continuous Delivery? A build tool? A CI tool? Automated tests? Automated quality? Automated deployment?
  5. 5. Yes...and No
  6. 6. Continuous Delivery is an attitude
  7. 7. Deliver business value more frequently
  8. 8. Value can also come in the form of fast feedback
  9. 9. Give power back to the business
  10. 10. The ‘eternal beta’ strategy
  11. 11. Principles of Continuous Delivery
  12. 12. Principle #1Every build is a potential release
  13. 13. Principle #2Eliminate manual bottlenecks
  14. 14. Principle #3Automate wherever possible
  15. 15. Principle #4Have automated tests you can trust
  16. 16. Build PipelinesThe conveyer belts of Continuous Delivery
  17. 17. Compile and unit test Package and deploy DEV Acceptance tests Deploy to QA QA Deploy to PROD PROD
  18. 18. Compile and unit testEach commit is a potential release Package and deploy DEV Acceptance tests Deploy to QA QA Deploy to PROD PROD
  19. 19. Compile and unit test Package and deploy DEV Acceptance testsWe reuse the same binaries Deploy to QA QA Deploy to PROD PROD
  20. 20. Compile and unit test Package and deploy DEV Acceptance testsAutomated tests give us confidence in our build Deploy to QA QA Deploy to PROD PROD
  21. 21. Compile and unit test Package and deploy DEV Acceptance testsAutomated, repeatable deployments QA Deploy to QA Deploy to PROD PROD
  22. 22. Continuous Delivery with Maven Why does it have to be so hard?!
  23. 23. The Maven lifecycle compile test-compile test package integration-test verify install deploy
  24. 24. The Maven lifecycleCompile and unit test mvn test compile test-compile test Integration tests mvn verify compile test-compile test package integration-test verify
  25. 25. The Maven lifecycleCompile and unit test mvn test compile test-compile test compile test-compile Integration tests mvn verify test package integration-test verifyDeploy to repository compile mvn deploy test-compile test package integration-test verify deploy
  26. 26. The Maven Release Process 1.0.0-SNAPSHOT 1.0.0-SNAPSHOT mvn release 1.0.0
  27. 27. The Maven Release Process mvn release:prepare• Check that there are no uncommitted changes in the sources• Check that there are no SNAPSHOT dependencies• Change the version in the POMs from x-SNAPSHOT to a new version (you will be prompted for the versions to use)• Transform the SCM information in the POM to include the final destination of the tag• Run the project tests against the modified POMs to confirm everything is in working order• Commit the modified POMs• Tag the code in the SCM with a version name (this will be prompted for)• Bump the version in the POMs to a new value y-SNAPSHOT (these values will also be prompted for)• Commit the modified POMs
  28. 28. The Maven Release Process mvn release:prepare compiletest-compile test package 1.0.0 integration-test verify 1.0.1-SNAPSHOT1.0.0-SNAPSHOT 1.0.1-SNAPSHOT
  29. 29. The Maven Release Process mvn release:perform compile test-compile test 1.0.0 package integration-test verify install deploy 1.0.0
  30. 30. The Maven Release ProcessMaven: You build a new release whena snapshot build is good enough Continuous Delivery: Any build is a potential release
  31. 31. Options?Make Maven work for you
  32. 32. Beware duplication!Build and unit test mvn test Integration tests mvn verify Code coverage... mvn site
  33. 33. Minimize build jobs for the main build Default build mvn install compile test integration-test verify install
  34. 34. Split unit and integration tests            <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-surefire-plugin</artifactId>                 <version>2.11</version>                 <configuration>                     <skip>true</skip>                 </configuration>                 <executions>                     <execution>                         <id>unit-tests</id>                         <phase>test</phase>                         <goals>                             <goal>test</goal>                         </goals>                         <configuration>                             <skip>false</skip>                             <includes>                                 <include>**/When*.*</include>                             </includes>                             <excludes>                                 <exclude>%regex[.*integration.*When.*]</exclude>                             </excludes>                         </configuration>                     </execution>                     <execution>                         <id>integration-tests</id>                         <phase>integration-test</phase>                         <goals>                             <goal>test</goal>                         </goals>                         <configuration>                             <skip>false</skip>                             <includes>                                 <include>%regex[.*integration.*]</include>                             </includes>                         </configuration>                     </execution> Using package conventions                 </executions>             </plugin>
  35. 35. Split unit and integration tests                <groupId>org.apache.maven.plugins</groupId>            <plugin>                 <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-surefire-plugin</artifactId>                 <artifactId>maven-surefire-plugin</artifactId>                <version>2.11</version>                 <version>2.11</version>                <configuration>                 <configuration>                     <skip>true</skip>                    <skip>true</skip>                 </configuration>                </configuration>                 <executions>                     <execution>                         <id>unit-tests</id>                         <phase>test</phase>                         <goals>                             <goal>test</goal>                         </goals>                         <configuration>                             <skip>false</skip>                             <includes>                                 <include>**/When*.*</include>                             </includes>                             <excludes>                                 <exclude>%regex[.*integration.*When.*]</exclude>                             </excludes>                         </configuration>                     </execution>                     <execution>                         <id>integration-tests</id>                         <phase>integration-test</phase>                         <goals>                             <goal>test</goal>                         </goals>                         <configuration>                             <skip>false</skip>                             <includes>                                 <include>%regex[.*integration.*]</include>                             </includes>                         </configuration>                     </execution> Using package conventions                 </executions>             </plugin>
  36. 36. Split unit and integration tests            <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-surefire-plugin</artifactId>                    <execution>                 <version>2.11</version>                 <configuration>                        <id>unit-tests</id>                     <skip>true</skip>                        <phase>test</phase>                 </configuration>                        <goals>                 <executions>                     <execution>                            <goal>test</goal>                         <id>unit-tests</id>                        </goals>                         <phase>test</phase>                         <goals>                        <configuration>                             <goal>test</goal>                            <skip>false</skip>                         </goals>                            <includes>                         <configuration>                             <skip>false</skip>                                <include>**/When*.*</include>                             <includes>                            </includes>                                 <include>**/When*.*</include>                            <excludes>                             </includes>                             <excludes>                                <exclude>%regex[.*integration.*When.*]</exclude>                                 <exclude>%regex[.*integration.*When.*]</exclude>                            </excludes>                             </excludes>                         </configuration>                        </configuration>                     </execution>                    </execution>                     <execution>                         <id>integration-tests</id> Excluding integration tests from the test phase                         <phase>integration-test</phase>                         <goals>                             <goal>test</goal>                         </goals>                         <configuration>                             <skip>false</skip>                             <includes>                                 <include>%regex[.*integration.*]</include>                             </includes>                         </configuration>                     </execution> Using package conventions                 </executions>             </plugin>
  37. 37. Split unit and integration tests            <plugin>                 <groupId>org.apache.maven.plugins</groupId>                 <artifactId>maven-surefire-plugin</artifactId>                 <version>2.11</version>                 <configuration>                     <skip>true</skip>                 </configuration>                 <executions>                     <execution>                         <id>unit-tests</id>Run only integration tests in the integration-test phase                         <phase>test</phase>                         <goals>                             <goal>test</goal>                         </goals>                     <execution>                         <configuration>                         <id>integration-tests</id>                             <skip>false</skip>                             <includes>                         <phase>integration-test</phase>                                 <include>**/When*.*</include>                         <goals>                             </includes>                             <goal>test</goal>                             <excludes>                                 <exclude>%regex[.*integration.*When.*]</exclude>                         </goals>                             </excludes>                         <configuration>                         </configuration>                             <skip>false</skip>                     </execution>                     <execution>                             <includes>                         <id>integration-tests</id>                                 <include>%regex[.*integration.*]</include>                         <phase>integration-test</phase>                         <goals>                             </includes>                             <goal>test</goal>                         </configuration>                         </goals>                     </execution>                         <configuration>                             <skip>false</skip>                             <includes>                                 <include>%regex[.*integration.*]</include>                             </includes>                         </configuration>                     </execution> Using package conventions                 </executions>             </plugin>
  38. 38. CompileDefault build Unit Test mvn deploy Package Integration Test
  39. 39. CompileDefault build Unit Test mvn install Package Integration Test Jenkins Artifactory Plugin
  40. 40. CompileDefault build Unit Test mvn install Package Integration Test mvn deploy:deploy
  41. 41. Eliminate waste
  42. 42. Run code coverage with the integration tests compile test-compile Integration tests mvn verify test package integration-test verify Test coverage mvn cobertura compile test-compile Duplication! test package integration-test cobertura Creates its own instrumented JAR files
  43. 43. JACOCOJava Code Coverage Code coverage on the flyDoesn’t mess with your JAR files
  44. 44. Run code coverage with the integration tests<plugin>    <groupId>org.jacoco</groupId>    <artifactId>jacoco-maven-plugin</artifactId>    <version>0.5.10.201208310627</version>    <executions>        <execution>            <id>jacoco-initialize</id>            <goals>                <goal>prepare-agent</goal>            </goals> Measure code coverage        </execution> after the integration tests        <execution>            <id>jacoco-site</id>            <phase>post-integration-test</phase>            <goals>                <goal>report</goal>            </goals>        </execution>    </executions></plugin>
  45. 45.            <plugin>Run code coverage with the integration tests                <groupId>org.jacoco</groupId>                <artifactId>jacoco-­‐maven-­‐plugin</artifactId>                <executions>                    <execution>                        <goals>                            <goal>prepare-­‐agent</goal>                        </goals>                    </execution>                    <execution>                        <id>check</id>                        <goals>                            <goal>check</goal> Define minimum coverage                        </goals>                        <phase>post-­‐integration-­‐test</phase>                        <configuration>                            <check>                                <classRate>95</classRate>                                <instructionRate>95</instructionRate>                                <methodRate>90</methodRate>                                <branchRate>95</branchRate>                                <complexityRate>95</complexityRate>                                <lineRate>95</lineRate>                            </check>                        </configuration>                    </execution>
  46. 46. Run code coverage with the integration testsIntegration tests/test compile test-compile mvn install test coverage package integration-test verify Uninstrumented JAR Coverage checks and report
  47. 47. Minimal overheadBuild Time Normal build With JaCoCo
  48. 48. Reuse binaries wherever possible Default build 1.0.203Deploy to TESTAcceptance Tests 1.0.201 1.0.202 1.0.203Deploy to UAT
  49. 49. Have a separate acceptance test suite Acceptance Tests TEST UAT PROD
  50. 50. Take code quality seriously Checkstyle Findbugs
  51. 51. Take code quality seriouslyCode quality metrics mvn site
  52. 52. Take code quality seriously Pick and choose your metricsCode quality metrics mvn pmd:check mvn findbugs:check mvn checkstye:checkstyle Fail the build if there are violations
  53. 53. Avoid the Maven Release PluginDon’t sweat the version numbers
  54. 54. Developers always work on a SNAPSHOT version 1.0-SNAPSHOT This number is pretty arbitrary
  55. 55. Jenkins sets a release candidate version at the start of the build pipeline 1.0-SNAPSHOT 1.0.203 This number is a build counter
  56. 56. This version goes through the build pipeline 1.0.203 Unit tests Acceptance tests Code quality metrics Deploy to TEST
  57. 57. This version goes through the build pipeline 1.0.203 1.0.204 1.0.205 Unit tests Acceptance tests Code quality metrics Deploy to TEST Acceptance Tests 1.0.203 1.0.204 1.0.205
  58. 58. Create a new release branch Update the version number Build and test release candidate Did it work? No YesDrop release branch Push release branchNotify everyone Deploy release candidate
  59. 59. Create a new release branch Update the version number Build and test release candidate 1.0.203 Did it work? No YesDrop release branch Push release branchNotify everyone Deploy release candidate
  60. 60. Create a new release branch Update the version number Versions Plugin Build and test release candidate mvn versions:set -DnewVersion=1.0.203 Did it work? No YesDrop release branch Push release branchNotify everyone Deploy release candidate
  61. 61. Create a new release branch Update the version number Build and test release candidate Did mvn verify ... it work? No YesDrop release branch Push release branchNotify everyone Deploy release candidate
  62. 62. And make it visible The Build Pipeline plugin
  63. 63. Let’s see it in action! TEST UAT PROD Jenkins
  64. 64. Let’s see it in action!
  65. 65. initial-build code-qualitydeploy-to-test acceptance-testsdeploy-to-uat acceptance-testsdeploy-to-prod
  66. 66. initial-build code-qualitydeploy-to-test acceptance-testsdeploy-to-uat acceptance-testsdeploy-to-prod
  67. 67. initial-build Links to binary artifacts in ArtifactoryRelease candidate number
  68. 68. initial-buildLinks to binary artifacts in Artifactory
  69. 69. initial-build Use a parameterized build to configure the major build version Users can override the default major version
  70. 70. initial-build Create a new branchUpdate the version in the pom files Build the binaries
  71. 71. initial-build Conditional build step plugin If the build succeeds... Commit the changes and push the branch to the repository
  72. 72. initial-build If the build fails... Delete the branch
  73. 73. initial-buildDeploy the release candidate to Artifactory
  74. 74. initial-build Deploy to the test environment Target platform
  75. 75. initial-build<plugin> <groupId>com.jelastic</groupId> <artifactId>jelastic-maven-plugin</artifactId> <version>1.6</version> <configuration> <email>${jelastic.username}</email> <password>${jelastic.password}</password> <context>${jelastic.context}</context> <environment>${jelastic.environment}</environment> <api_hoster>app.jelastic.servint.net</api_hoster> </configuration></plugin>
  76. 76. initial-build Archive binaryUpdate the build description
  77. 77. initial-build Archive binaryPass the release branch to the next build job
  78. 78. initial-buildDon’t start a new build pipeline ifone is currently running.
  79. 79. initial-build code-qualitydeploy-to-test acceptance-testsdeploy-to-uat acceptance-testsdeploy-to-prod
  80. 80. initial-build code-qualityPass in the release we want to build against deploy-to-test acceptance-tests deploy-to-uat acceptance-tests deploy-to-prod
  81. 81. initial-build code-quality deploy-to-testBuild from the release candidate branch acceptance-tests deploy-to-uat acceptance-tests deploy-to-prod
  82. 82. initial-build code-qualitydeploy-to-test acceptance-testsdeploy-to-uat acceptance-testsdeploy-to-prod
  83. 83. initial-build code-qualityCopy the WAR file from the initial build deploy-to-test acceptance-tests deploy-to-uat acceptance-tests deploy-to-prod
  84. 84. initial-build code-qualitydeploy-to-test acceptance-testsdeploy-to-uat ...deploy this WAR file acceptance-testsdeploy-to-prod
  85. 85. initial-build code-qualitydeploy-to-test acceptance-testsdeploy-to-uat acceptance-testsdeploy-to-prod the acceptance tests ...and run
  86. 86. initial-build code-quality deploy-to-test acceptance-tests deploy-to-uatWhat platform do we run the acceptance test against acceptance-tests deploy-to-prod
  87. 87. initial-build code-quality deploy-to-test acceptance-tests deploy-to-uatWhat platform do we run the acceptance test against acceptance-tests deploy-to-prod
  88. 88. initial-build code-qualitydeploy-to-test acceptance-testsdeploy-to-uat acceptance-testsdeploy-to-prod
  89. 89. initial-build code-quality deploy-to-test acceptance-tests deploy-to-uatWhat platform do we run the acceptance test against acceptance-tests deploy-to-prod
  90. 90. initial-build code-quality deploy-to-test acceptance-tests deploy-to-uatWhat platform do we run the acceptance test against acceptance-tests deploy-to-prod
  91. 91. initial-build code-quality deploy-to-test acceptance-tests deploy-to-uatBuild promotion status acceptance-tests deploy-to-prod
  92. 92. initial-buildCopy the WAR file from the initial build... code-quality deploy-to-test acceptance-tests deploy-to-uat ...and deploy it to UAT acceptance-tests deploy-to-prod
  93. 93. A build promotioninitial-build deploy to production process to code-quality deploy-to-test acceptance-tests deploy-to-uat acceptance-tests deploy-to-prod
  94. 94. A build promotioninitial-build deploy to production process to code-quality deploy-to-test acceptance-tests deploy-to-uat acceptance-tests deploy-to-prod
  95. 95. Build pipeline for an overview of the process
  96. 96. Thank You John  Ferguson  Smart Email:  john.smart@wakaleo.com Web:  hHp://www.wakaleo.com TwiHer:  wakaleo
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×