SlideShare a Scribd company logo
Leveraging Continuous Integration for Fun and Profit!Jess ChadwickIndependent Consultanthttp://blog.jesschadwick.com
AgendaWhat is Continuous Integration?How does it fit in to the Agile lifecycle?How do I implement it?Best Practices
What is Continuous Integration?Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including tests) to detect integration errors as quickly as possible.Many teams find that this approach leads to significantly reduced integration problemsand allows a team to develop software more rapidly.Martin Fowler, September 2000
Layers of Quality Assurance
Continuous Integration in XP
Benefits of Continuous Integration
Exponentially Building Value
Components
CI Servers
Covert OperationCan’t get your team to buy in?Run it on your own box!
Build Scripts – NAnt<?xml version="1.0"?><project name="Hello World" default="build" basedir=".">    <description>The Hello World of build files.</description>    <property name="debug" value="true" overwrite="false" />    <target name="clean" description="remove all generated files">        <delete file="HelloWorld.exe" failonerror="false" />        <delete file="HelloWorld.pdb" failonerror="false" />    </target>    <target name="build" description="compiles the source code">        <csc target="exe" output="HelloWorld.exe" debug="${debug}">            <sources>                <includes name="HelloWorld.cs" />            </sources>        </csc>    </target></project>
Build Scripts – MSBuild<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">   <PropertyGroup>      <OutputPath>.\bin</OutputPath>   </PropertyGroup>   <Target Name="FooCompilation">      <MakeDir Directories= "$(OutputPath)"/>      <Copy SourceFiles="Image.jpg" DestinationFiles="$(OutputPath)\Image.jpg"/>      <Csc Sources="Foo2.cs"        TargetType="module"OutputAssembly="$(OutputPath)\Foo2.netmodule" />      <Csc Sources="Foo1.cs"        TargetType="exe"AddModules="$(OutputPath)\Foo2.netmodule" LinkResources="Image.jpg" OutputAssembly="$(OutputPath)\Foo1.exe" />   </Target></Project>
Build Scripts – psakeproperties {   $testMessage = 'Executed Test!'   $compileMessage = 'Executed Compile!'   $cleanMessage = 'Executed Clean!' }task default -depends Testtask Test -depends Compile, Clean {   Write-Host $testMessage}task Compile -depends Clean {   Write-Host $compileMessage}task Clean {   Write-Host $cleanMessage}
Build Scripts – rake#!/usr/bin/env rubyrequire 'ftools'def make_directoriesFile.makedirs "html"File.makedirs "html/images"Enddef generate_html  system %{./runwpbrake.wpb}enddef buildmake_directoriesgenerate_htmlendbuild
DEMOLet’s see it in action!
Notifications
Notifications – Lava Lampshttp://agileworks.blogspot.com/2009/02/lava-lamp-with-cruisecontrol.html
Notifications – iPhone appYeah – there’s an app for that.
Notifications – Brian the Build BunnyBrian Woodward:  http://www.woodwardweb.com/gadgets/000434.html
Best PracticesBuild must be green at the end of the dayNever check in code and leave office (ninja commit)Stay and fix the code OR revert the check inCheck in oftenLess chance of merge conflictAlways have the latest codeNever check in or check out of a broken build
Best Practices – cont’dCommunicateBe informed. Keep up-to-date with build statusIf you broke the build, tell the teamMerge conflict? Talk to - don’temail - the other team member(s)Be familiar with the build processDon’t have to be the ‘build master’ but need to know how to troubleshoot and fix
Various Build TypesContinuous:  Run on every commit (give or take)Lean & FastVery basic validationTimed:  Hourly, Nightly, etc.LongerMore in-depthDeploymentUtilityMuch like scheduled tasksFor ease of use
But there’s more!Post-BuildDatabase upgradeCode analysis      (coverage, quality metrics, compliance)PackagingDeployment
Continuous DeploymentShrink the ‘Last Mile’ (QA, UAT, Production)Reduce riskExercise deployment process earlySoftware always ready for deployment
Discussion TimeViewpointsExperiences & TipsValueshttp://blog.jesschadwick.comTwitter: jchadwickjchadwick@gmail.com

More Related Content

PPT
PPT
Selenium and Cucumber Selenium Conf 2011
PDF
html5 & phonegap
PDF
Front-end Automated Testing
PDF
Testing nightwatch, by David Torroija
PDF
Spring framework 4.0
PDF
How QCLean Works? Introduction to Browser Extensions
PPT
Phone gap android plugins
Selenium and Cucumber Selenium Conf 2011
html5 & phonegap
Front-end Automated Testing
Testing nightwatch, by David Torroija
Spring framework 4.0
How QCLean Works? Introduction to Browser Extensions
Phone gap android plugins

What's hot (20)

ODP
iOS Automation with Cucumber, Appium and Saucelabs
PPT
Headless BDD & Responsive Test Automation
PDF
React native - What, Why, How?
ODP
Web Development in Django
PPT
Oscon 20080724
ZIP
Automated Frontend Testing
PDF
The PHP Way Of TDD - Think First, Code Later
PPTX
Nightwatch JS for End to End Tests
PDF
Writing Software not Code with Cucumber
PDF
Essential debugging php debugging techniques, tips & tricks
PDF
Minimum Viable Docker: our journey towards orchestration
ODP
iOS Developers Conference-iOS Automation with Cucumber, Appium and Saucelabs
PDF
Continuous Deployment at Etsy
PPTX
Getting Started with Test Automation: Introduction to Cucumber with Lapis Lazuli
PDF
Conditional Love - Using WordPress Conditional Tags to Write More Effective T...
PPTX
Improving WordPress Performance: Xdebug and PHP profiling
ODP
BDD using Behat, Selenium,Sahi and SauceLabs
PPTX
Your Script Just Killed My Site
PPTX
Speed = $$$
PDF
Getting By Without "QA"
iOS Automation with Cucumber, Appium and Saucelabs
Headless BDD & Responsive Test Automation
React native - What, Why, How?
Web Development in Django
Oscon 20080724
Automated Frontend Testing
The PHP Way Of TDD - Think First, Code Later
Nightwatch JS for End to End Tests
Writing Software not Code with Cucumber
Essential debugging php debugging techniques, tips & tricks
Minimum Viable Docker: our journey towards orchestration
iOS Developers Conference-iOS Automation with Cucumber, Appium and Saucelabs
Continuous Deployment at Etsy
Getting Started with Test Automation: Introduction to Cucumber with Lapis Lazuli
Conditional Love - Using WordPress Conditional Tags to Write More Effective T...
Improving WordPress Performance: Xdebug and PHP profiling
BDD using Behat, Selenium,Sahi and SauceLabs
Your Script Just Killed My Site
Speed = $$$
Getting By Without "QA"
Ad

Similar to Leveraging Continuous Integration For Fun And Profit! (20)

PPTX
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
PPT
Continuous Integration using Cruise Control
PPTX
5 Reasons To Love CodeIgniter
ODP
Improving code quality using CI
ODP
Enterprise Workflows When You Aren't Enterprise
PDF
Continous delivery with Jenkins and Chef
PPT
Building Web Hack Interfaces
ODP
WebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
PDF
Step away from that knife!
PPT
Even Faster Web Sites at jQuery Conference '09
PPTX
Continuous Delivery with TFS msbuild msdeploy
PPT
Introduction To Eclipse RCP
PDF
The "Holy Grail" of Dev/Ops
PPTX
Building Large Scale PHP Web Applications with Laravel 4
PDF
Revoke-Obfuscation
PPTX
Azure from scratch part 4
PDF
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
PPT
Maven 2.0 - Improve your build patterns
PDF
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
PPT
Introduction To Code Igniter
Joomla! Day Chicago 2011 Presentation - Steven Pignataro
Continuous Integration using Cruise Control
5 Reasons To Love CodeIgniter
Improving code quality using CI
Enterprise Workflows When You Aren't Enterprise
Continous delivery with Jenkins and Chef
Building Web Hack Interfaces
WebTest - Efficient Functional Web Testing with HtmlUnit and Beyond
Step away from that knife!
Even Faster Web Sites at jQuery Conference '09
Continuous Delivery with TFS msbuild msdeploy
Introduction To Eclipse RCP
The "Holy Grail" of Dev/Ops
Building Large Scale PHP Web Applications with Laravel 4
Revoke-Obfuscation
Azure from scratch part 4
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
Maven 2.0 - Improve your build patterns
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Introduction To Code Igniter
Ad

Recently uploaded (20)

PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Modernizing your data center with Dell and AMD
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
KodekX | Application Modernization Development
PDF
Empathic Computing: Creating Shared Understanding
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
A Presentation on Artificial Intelligence
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Review of recent advances in non-invasive hemoglobin estimation
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Modernizing your data center with Dell and AMD
Unlocking AI with Model Context Protocol (MCP)
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Advanced methodologies resolving dimensionality complications for autism neur...
NewMind AI Weekly Chronicles - August'25 Week I
KodekX | Application Modernization Development
Empathic Computing: Creating Shared Understanding
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
The AUB Centre for AI in Media Proposal.docx
Mobile App Security Testing_ A Comprehensive Guide.pdf
Network Security Unit 5.pdf for BCA BBA.
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
A Presentation on Artificial Intelligence
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Review of recent advances in non-invasive hemoglobin estimation

Leveraging Continuous Integration For Fun And Profit!

  • 1. Leveraging Continuous Integration for Fun and Profit!Jess ChadwickIndependent Consultanthttp://blog.jesschadwick.com
  • 2. AgendaWhat is Continuous Integration?How does it fit in to the Agile lifecycle?How do I implement it?Best Practices
  • 3. What is Continuous Integration?Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including tests) to detect integration errors as quickly as possible.Many teams find that this approach leads to significantly reduced integration problemsand allows a team to develop software more rapidly.Martin Fowler, September 2000
  • 4. Layers of Quality Assurance
  • 10. Covert OperationCan’t get your team to buy in?Run it on your own box!
  • 11. Build Scripts – NAnt<?xml version="1.0"?><project name="Hello World" default="build" basedir="."> <description>The Hello World of build files.</description> <property name="debug" value="true" overwrite="false" /> <target name="clean" description="remove all generated files"> <delete file="HelloWorld.exe" failonerror="false" /> <delete file="HelloWorld.pdb" failonerror="false" /> </target> <target name="build" description="compiles the source code"> <csc target="exe" output="HelloWorld.exe" debug="${debug}"> <sources> <includes name="HelloWorld.cs" /> </sources> </csc> </target></project>
  • 12. Build Scripts – MSBuild<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <OutputPath>.\bin</OutputPath> </PropertyGroup> <Target Name="FooCompilation"> <MakeDir Directories= "$(OutputPath)"/> <Copy SourceFiles="Image.jpg" DestinationFiles="$(OutputPath)\Image.jpg"/> <Csc Sources="Foo2.cs" TargetType="module"OutputAssembly="$(OutputPath)\Foo2.netmodule" /> <Csc Sources="Foo1.cs" TargetType="exe"AddModules="$(OutputPath)\Foo2.netmodule" LinkResources="Image.jpg" OutputAssembly="$(OutputPath)\Foo1.exe" /> </Target></Project>
  • 13. Build Scripts – psakeproperties { $testMessage = 'Executed Test!' $compileMessage = 'Executed Compile!' $cleanMessage = 'Executed Clean!' }task default -depends Testtask Test -depends Compile, Clean { Write-Host $testMessage}task Compile -depends Clean { Write-Host $compileMessage}task Clean { Write-Host $cleanMessage}
  • 14. Build Scripts – rake#!/usr/bin/env rubyrequire 'ftools'def make_directoriesFile.makedirs "html"File.makedirs "html/images"Enddef generate_html system %{./runwpbrake.wpb}enddef buildmake_directoriesgenerate_htmlendbuild
  • 15. DEMOLet’s see it in action!
  • 17. Notifications – Lava Lampshttp://agileworks.blogspot.com/2009/02/lava-lamp-with-cruisecontrol.html
  • 18. Notifications – iPhone appYeah – there’s an app for that.
  • 19. Notifications – Brian the Build BunnyBrian Woodward: http://www.woodwardweb.com/gadgets/000434.html
  • 20. Best PracticesBuild must be green at the end of the dayNever check in code and leave office (ninja commit)Stay and fix the code OR revert the check inCheck in oftenLess chance of merge conflictAlways have the latest codeNever check in or check out of a broken build
  • 21. Best Practices – cont’dCommunicateBe informed. Keep up-to-date with build statusIf you broke the build, tell the teamMerge conflict? Talk to - don’temail - the other team member(s)Be familiar with the build processDon’t have to be the ‘build master’ but need to know how to troubleshoot and fix
  • 22. Various Build TypesContinuous: Run on every commit (give or take)Lean & FastVery basic validationTimed: Hourly, Nightly, etc.LongerMore in-depthDeploymentUtilityMuch like scheduled tasksFor ease of use
  • 23. But there’s more!Post-BuildDatabase upgradeCode analysis (coverage, quality metrics, compliance)PackagingDeployment
  • 24. Continuous DeploymentShrink the ‘Last Mile’ (QA, UAT, Production)Reduce riskExercise deployment process earlySoftware always ready for deployment
  • 25. Discussion TimeViewpointsExperiences & TipsValueshttp://blog.jesschadwick.comTwitter: jchadwickjchadwick@gmail.com

Editor's Notes

  • #7: Avoid “Build on my machine” syndromeMetrics = coverage, complexity, coherence, couplingConformance = Styles, FxCop
  • #21: Checkin often = average every 15 min to 30 minGood guide on when to stop = Unit test is green