Continuous Integration.docx
- 文档编号:6897913
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:14
- 大小:32.25KB
Continuous Integration.docx
《Continuous Integration.docx》由会员分享,可在线阅读,更多相关《Continuous Integration.docx(14页珍藏版)》请在冰豆网上搜索。
ContinuousIntegration
ContinuousIntegration
ContinuousIntegrationisasoftwaredevelopmentpracticewheremembersofateamintegratetheirworkfrequently,usuallyeachpersonintegratesatleastdaily-leadingtomultipleintegrationsperday.Eachintegrationisverifiedbyanautomatedbuild(includingtest)todetectintegrationerrorsasquicklyaspossible.Manyteamsfindthatthisapproachleadstosignificantlyreducedintegrationproblemsandallowsateamtodevelopcohesivesoftwaremorerapidly.ThisarticleisaquickoverviewofContinuousIntegrationsummarizingthetechniqueanditscurrentusage.
01May2006
MartinFowler
Translations:
PortugueseChineseKorean
ThoughtWorks,myemployer,offersconsultingandsupportaroundContinuousIntegration.TheopensourceCruiseControl,thefirstcontinuousintegrationserver,wasoriginallycreatedatThoughtWorks.RecentlyThoughtWorksStudios,ourproductsgroup,hasreleasedGo-anewserverforcontinuousintegrationanddelivery.Itsupportsparallel,stagedbuildswithmultipleprojects,asnazzylookingdashboard,andsupportforautomateddeployments.It'sacommercialtool,butisfreetouseforsmallsetups.
Contents
∙BuildingaFeaturewithContinuousIntegration
∙PracticesofContinuousIntegration
oMaintainaSingleSourceRepository.
oAutomatetheBuild
oMakeYourBuildSelf-Testing
oEveryoneCommitsTotheMainlineEveryDay
oEveryCommitShouldBuildtheMainlineonanIntegrationMachine
oKeeptheBuildFast
oTestinaCloneoftheProductionEnvironment
oMakeitEasyforAnyonetoGettheLatestExecutable
oEveryonecanseewhat'shappening
oAutomateDeployment
∙BenefitsofContinuousIntegration
∙IntroducingContinuousIntegration
∙FinalThoughts
∙FurtherReading
Ivividlyrememberoneofmyfirstsightingsofalargesoftwareproject.IwastakingasummerinternshipatalargeEnglishelectronicscompany.Mymanager,partoftheQAgroup,gavemeatourofasiteandweenteredahugedepressingwarehousestackedfullwithcubes.Iwastoldthatthisprojecthadbeenindevelopmentforacoupleofyearsandwascurrentlyintegrating,andhadbeenintegratingforseveralmonths.Myguidetoldmethatnobodyreallyknewhowlongitwouldtaketofinishintegrating.FromthisIlearnedacommonstoryofsoftwareprojects:
integrationisalongandunpredictableprocess.
Butthisneedn'tbetheway.MostprojectsdonebymycolleaguesatThoughtWorks,andbymanyothersaroundtheworld,treatintegrationasanon-event.Anyindividualdeveloper'sworkisonlyafewhoursawayfromasharedprojectstateandcanbeintegratedbackintothatstateinminutes.Anyintegrationerrorsarefoundrapidlyandcanbefixedrapidly.
Thiscontrastisn'ttheresultofanexpensiveandcomplextool.Theessenceofitliesinthesimplepracticeofeveryoneontheteamintegratingfrequently,usuallydaily,againstacontrolledsourcecoderepository.
TheoriginalarticleonContinuousIntegrationdescribesourexperiencesasMatthelpedputtogethercontinuousintegrationonaThoughtWorksprojectin2000.
WhenI'vedescribedthispracticetopeople,Icommonlyfindtworeactions:
"itcan'twork(here)"and"doingitwon'tmakemuchdifference".Whatpeoplefindoutastheytryitisthatit'smucheasierthanitsounds,andthatitmakesahugedifferencetodevelopment.Thusthethirdcommonreactionis"yeswedothat-howcouldyoulivewithoutit?
"
Theterm'ContinuousIntegration'originatedwiththeExtremeProgrammingdevelopmentprocess,asoneofitsoriginaltwelvepractices.WhenIstartedatThoughtWorks,asaconsultant,IencouragedtheprojectIwasworkingwithtousethetechnique.MatthewFoemmelturnedmyvagueexhortationsintosolidactionandwesawtheprojectgofromrareandcomplexintegrationstothenon-eventIdescribed.MatthewandIwroteupourexperienceintheoriginalversionofthispaper,whichhasbeenoneofthemostpopularpapersonmysite.
AlthoughContinuousIntegrationisapracticethatrequiresnoparticulartoolingtodeploy,we'vefoundthatitisusefultouseaContinuousIntegrationserver.ThebestknownsuchserverisCruiseControl,anopensourcetooloriginallybuiltbyseveralpeopleatThoughtWorksandnowmaintainedbyawidecommunity.SincethenseveralotherCIservershaveappeared,bothopensourceandcommercial-includingCruisefromThoughtWorksStudios.
BuildingaFeaturewithContinuousIntegration
TheeasiestwayformetoexplainwhatCIisandhowitworksistoshowaquickexampleofhowitworkswiththedevelopmentofasmallfeature.Let'sassumeIhavetodosomethingtoapieceofsoftware,itdoesn'treallymatterwhatthetaskis,forthemomentI'llassumeit'ssmallandcanbedoneinafewhours.(We'llexplorelongertasks,andotherissueslateron.)
Ibeginbytakingacopyofthecurrentintegratedsourceontomylocaldevelopmentmachine.Idothisbyusingasourcecodemanagementsystembycheckingoutaworkingcopyfromthemainline.
Theaboveparagraphwillmakesensetopeoplewhousesourcecodecontrolsystems,butbegibberishtothosewhodon't.Soletmequicklyexplainthatforthelatter.Asourcecodecontrolsystemkeepsallofaproject'ssourcecodeinarepository.Thecurrentstateofthesystemisusuallyreferredtoasthe'mainline'.Atanytimeadevelopercanmakeacontrolledcopyofthemainlineontotheirownmachine,thisiscalled'checkingout'.Thecopyonthedeveloper'smachineiscalleda'workingcopy'.(Mostofthetimeyouactuallyupdateyourworkingcopytothemainline-inpracticeit'sthesamething.)
NowItakemyworkingcopyanddowhateverIneedtodotocompletemytask.Thiswillconsistofbothalteringtheproductioncode,andalsoaddingorchangingautomatedtests.ContinuousIntegrationassumesahighdegreeoftestswhichareautomatedintothesoftware:
afacilityIcallself-testingcode.OftentheseuseaversionofthepopularXUnittestingframeworks.
OnceI'mdone(andusuallyatvariouspointswhenI'mworking)Icarryoutanautomatedbuildonmydevelopmentmachine.Thistakesthesourcecodeinmyworkingcopy,compilesandlinksitintoanexecutable,andrunstheautomatedtests.Onlyifitallbuildsandtestswithouterrorsistheoverallbuildconsideredtobegood.
Withagoodbuild,Icanthenthinkaboutcommittingmychangesintotherepository.Thetwist,ofcourse,isthatotherpeoplemay,andusuallyhave,madechangestothemainlinebeforeIgetchancetocommit.SofirstIupdatemyworkingcopywiththeirchangesandrebuild.Iftheirchangesclashwithmychanges,itwillmanifestasafailureeitherinthecompilationorinthetests.Inthiscaseit'smyresponsibilitytofixthisandrepeatuntilIcanbuildaworkingcopythatisproperlysynchronizedwiththemainline.
OnceIhavemademyownbuildofaproperlysynchronizedworkingcopyIcanthenfinallycommitmychangesintothemainline,whichthenupdatestherepository.
Howevermycommitdoesn'tfinishmywork.Atthispointwebuildagain,butthistimeonanintegrationmachinebasedonthemainlinecode.Onlywhenthisbuildsucceedscanwesaythatmychangesaredone.ThereisalwaysachancethatImissedsomethingonmymachineandtherepositorywasn'tproperlyupdated.Onlywhenmycommittedchangesbuildsuccessfullyontheintegrationismyjobdone.Thisintegrationbuildcanbeexecutedmanuallybyme,ordoneautomaticallybyCruise.
Ifaclashoccursbetweentwodevelopers,itisusuallycaughtwhentheseconddevelopertocommitbuildstheirupdatedworkingcopy.Ifnottheintegrationbuildshouldfail.Eitherwaytheerrorisdetectedrapidly.Atthispointthemostimportanttaskistofixit,andgetthebuildworkingproperlyagain.InaContinuousIntegrationenvironmentyoushouldneverhaveafailedintegrationbuildstayfailedforlong.Agoodteamshouldhavemanycorrectbuildsaday.Badbuildsdooccurfromtimetotime,butshouldbequicklyfixed.
Theresultofdoingthisisthatthereisastablepieceofsoftwarethatworksproperlyandcontainsfewbugs.Everybodydevelopsoffthatsharedstablebaseandnevergetssofarawayfromthatbasethatittakesverylongtointegratebackwithit.Lesstimeisspenttryingtofindbugsbecausetheyshowupquickly.
PracticesofContinuousIntegration
ThestoryaboveistheoverviewofCIandhowitworksindailylife.Gettingallthistoworksmoothlyisobviouslyrathermorethanthat.I'llfocusnowonthekeypracticesthatmakeupeffectiveCI.
MaintainaSingleSourceRepository.
Softwareprojectsinvolvelotsoffilesthatneedtobeorchestratedtogethertobuildaproduct.Keepingtrackofalloftheseisamajoreffort,particularlywhenthere'smultiplepeopleinvolved.Soit'snotsurprisingthatovertheyearssoftwaredevelopmentteamshavebuilttoolstomanageallthis.Thesetools-calledSourceCodeManagementtools,configurationmanagement,versioncontrolsystems,repositories,orvariousothernames-areanintegralpartofmostdevelopmentprojects.Thesadandsurprisingthingisthattheyaren'tpartofallprojects.Itisrare,butIdorunintoprojectsthatdon'tusesuchasystemandusesomemessycombinationoflocalandshareddrives.
Soasasimplebasismakesureyougetadecentsourcecodemanagementsystem.Costisn'tanissueasgoodqualityopen-sourcetoolsareavailable.ThecurrentopensourcerepositoryofchoiceisSubversion.(Theolderopen-sourcetoolCVSisstillwidelyused,andismuchbetterthannothing,butSubversionisthemodernchoice.)InterestinglyasItalktodevelopersIknowmostcommercialsourcecodemanagementtoolsarelikedlessthanSubversion.TheonlytoolI'veconsistentlyheardpeopl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Continuous Integration