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

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

Embed Size (px)

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

Citation preview

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