Agile Automation

The speed at which Agile projects run demands a high level of automation surrounding any repetitive activities. Nowhere is this more obvious than in a build/test/deploy process. Builds have traditionally been a source of pain and the natural reaction to this pain is for teams to put off the build and deployment activities thereby incurring large amounts of ‘project debt’. In an agile world we attack this problem by accelerating and automating the build and deployment processes. The goal of this class is to educate a team on how to apply automation to all stages of their work. We incrementally build a complete Continuous Integration strategy that is applicable and configurable for most any environment.
Students will use Java, Eclipse, JUnit, Ant, and Cruise Control during the course.

 

Topics Included
• Completely automating the build process
• Making builds portable across machines
• Integrating testing into the build
• Automating the deployment process
• Automating communication and messaging infrastructure
• Unlocking the full potential of a source control through effective use of tags, branches and merging


Course Details
Prerequisites: Agile Foundations, Familiarity with application customizations and scripting facilities
Audience: Developers, QA
Duration: 3 Days
Lab to Lecture Ratio: 60/40

Course Outline
Day 1 Summary
Lectures
• Motivation
• Types of automation - commanded, scheduled, triggered
• Prerequisites to agile automation: version control, automated tests
• Agile tendencies: UT, TFD, TDD, CI, CD
• Road map
     o One step builds
     o Scheduled builds
     o Push button releases
     o Installation and deployment
     o And monitoring for all...
• CRISP criteria
• One-Step Builds
     o Building from the command line
     o Scripting the build
• Scheduled Builds
     o Why
     o How
     o What
     o Website status
Labs
• Directory structure exercise on use of SubVersion in Eclipse
• Ant exercise on putting together build scripts
• Cron exercise


Day 2 Summary
Lectures
• Setting up a Continuous Integration Server
• Push Button Releases
     o What is a release?
     o How should this affect the code tree?
     o Packaging the release, and the relationship to testing
     o Creating a distribution
     o Tagging the release
Labs
• CruiseControl install, use, project setup, and cctray
• CruiseControl email notification configuration
• Creating Push Button Releases.

 

Day 3 Summary
Lectures 
Installation and Deployment
     o What goes wrong in an installation and how we deal with that
     o Diagnostic testing during installation
     o Issues specific to J2EE hosted applications and how hot deployment is used
     o Auto updating: you know what it is, now how can we do it in this environment?
     o JWS and auto updating. Is this the total solution? 
Monitoring
     o More CruiseControl publishers, such as SMS and RSS
     o The cool stuff: visual information reflectors
     o Monitoring your installed base with log4j and Trip Wires
     o Automating a crash report.
Labs
• Writing installation diagnostic tests
• Creating and using an installation package
• Use of SMS and RSS publishers in CruiseControl