Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

26
Lecture XIII: Cont inuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineer

description

Continuous Integration Teams integrate their work multiple times per day. Each integration is verified by an automated build Significantly reduces integration problems Develop cohesive software more rapidly Source: Martin Fowler

Transcript of Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Page 1: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Lecture XIII: Continuous Integration

CS 4593Cloud-Oriented Big Data and Software Engineering

Page 2: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

2

Continuous Integration We introduced Continuous Deployment Continuous Update for the whole

software process: Continuous Integration

Page 3: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Continuous Integration• Teams integrate their work multiple times

per day. • Each integration is verified by an

automated build • Significantly reduces integration problems• Develop cohesive software more rapidlySource: Martin Fowler

Page 4: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Five Principles of Continuous Integration

• Environments based on stability• Maintain a code repository• Commit frequently and build every

commit• Make the build self-testing

Page 5: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Environments based on stability

• Create server environments to model code stability

• Promote code to stricter environments as quality improves.

Page 6: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Production Environment Hardware

• Application servers– 8 application server

• 12 cores, 48 GB RAM– 10 web server

• 2 cores, 2 GB RAM• Database servers

– 4 web databases• 4 cores, 16 GB, 2 SSD

– 1 application database• 12 cores, 48 GB RAM, 15 SSD

Page 7: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Stage Environment Hardware

• Application servers– 7 application server

• 4 cores, 4 GB RAM– 2 web server

• 2 cores, 2 GB RAM• Database servers

– 1 web database• 4 cores, 16 GB, 8 SAS

– 1 application database• 8 cores, 16 GB RAM, 16 SATA

• Continuous Integration Server• 2 cores, 4 GB RAM, 1 SATA

Page 8: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Test Environment Hardware

• Each team of 8 developers has a test environment– VM server

• 4 cores, 16 GB RAM– Database servers

• 4 cores, 24 GB RAM, 8 SATA drives

• Continuous Integration Server• 8 cores, 16 GB RAM, 1 SATA drive

Page 9: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Dev Environment Hardware

• Application servers– Workstations with 4 cores, 8 GB RAM– One per developer

• Database servers– Shared with Test environment

Page 10: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Commit Frequently Build Every Commit

• Change your habits– Commit small, functional changes– Unit tests!– Team owns the code, not the

individual

Page 11: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

The code builds on my box...

• Source code repository is the source of record

• Build server settles disputes– Only gets code from Repo

• Build server the final authority on stability/quality

Page 12: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Build every commit

• Why compile frequently?• Agile principles

– If it hurts, do it more often. – Many difficult activities can be made

much more straightforward by doing them more frequently.

– Reduce time between defect introduction and removal

• Automate the build– Key to continuous integration

Page 13: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Add testing to build

• Individual programmers <50% efficient at finding their own bugs

• Multiple quality methods = more defects discovered– Use 3 or more methods for >90% defect removal

• Most effective methods– design inspections– code inspections– Testing

Source: http://www.scribd.com/doc/7758538/Capers-Jones-Software-Quality-in-2008

Page 14: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Self Testing Builds

• System Tests– End-to-end test– Often take minutes to hours to run

• Unit tests– Fast

• No database or file system– Focused

• Pinpoint problems– Best method for verifying builds

Page 15: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Automated Quality with Continuous Integration• Static code analysis

– Looks for common java bugs (Findbugs, PMD)– Check for code compliance (Checkstyle)

• Unit test analysis– Measure coverage (Cobertura)– Look for hotspots, areas of low testing and high

complexity (SONAR)

Page 16: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Build Server Hardware• Maven and Java = lots of memory• Compile and unit test = lots of CPU• Static analysis = lots and lots of CPU• 8 cores, 16GB RAM, 2 SATA• Ubuntu Linux• 8 parallel builds

• KEEP IT FAST

Page 17: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Free Continuous Integration Servers• Cruise Control (ThoughtWorks)

– Yucky XML configuration– Commercial version (Cruise) is a rewrite

• Continuum (Apache)– Great Maven support– No plugins, ok user interface, and slow builds

• Hudson (Oracle)– Self updating and easy to administor– Many useful plugins– Great user interface– Scale out with additional nodes– Best by a wide margin

Page 18: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Jenkins for Continuous IntegrationJenkins – open source continuous integration

serverJenkins (http://jenkins-ci.org/) is

Easy to installEasy to useMulti-technologyMulti-platformWidely usedExtensibleFree

Page 19: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Jenkins for a DeveloperEasy to install

Download one file – jenkins.warRun one command – java –jar jenkins.war

Easy to useCreate a new job – checkout and build a small projectCheckin a change – watch it buildCreate a test – watch it build and runFix a test – checkin and watch it pass

Multi-technologyBuild C, Java, C#, Python, Perl, SQL, etc.Test with Junit, Nunit, MSTest, etc.

Page 20: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Developer demo goes here…Create a new job from a Subversion repositoryBuild that code, see build resultsRun its tests, see test resultsMake a change and watch it run through the

systemLanguages

JavaCPython

Page 21: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

More Power – Jenkins PluginsJenkins has over 300 plugins

Software configuration managementBuildersTest FrameworksVirtual Machine ControllersNotifiersStatic Analyzers

Page 22: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Jenkins Plugins - SCM Version Control Systems

Accurev Bazaar BitKeeper ClearCase Darcs Dimensions Git Harvest MKS Integrity PVCS StarTeam Subversion Team Foundation Server Visual SourceSafe

Page 23: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Jenkins Plugins – Build & Test

Build ToolsAntMavenMSBuildCmakeGradleGrailsSconsGroovy

Test FrameworksJunitNunitMSTestSeleniumFitnesse

Page 24: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Jenkins Plugins – Analyzers

Static AnalysisCheckstyleCodeScannerDRYCrap4jFindbugsPMDFortifySonarFXCop

Code CoverageEmmaCoberturaCloverGCC/GCOV

Page 25: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Jenkins Plugins – Other Tools

NotificationTwitterCampfireGoogle CalendarIMIRCLava LampSoundsSpeak

AuthorizationActive DirectoryLDAP

Virtual MachinesAmazon EC2VMWareVirtualBoxXenLibvirt

Page 26: Lecture XIII: Continuous Integration CS 4593 Cloud-Oriented Big Data and Software Engineering.

Jenkins for TeamsMulti-configuration jobsMulti-stage jobsSwarms to dynamically contribute capacity