
Continuous Integration for Ruby on Rails Ross Niemi ThoughtWorks, Inc. Email: [email protected] Blog: http://rossniemi.wordpress.com March 12th, 2007 Agenda • What is Continuous Integration (CI)? • What CI tools are currently available for Ruby and Ruby on Rails (RoR)? • How do these tools compare? • Demo • Questions Agile Software Development • Agile Manifesto – Individuals and interactions over processes and tools – Working software over comprehensive documentation – Customer collaboration over contract negotiation – Responding to change over following a plan • Continuous Integration helps us to deliver working software Continuous Integration • “… is a software development practice where members of a team integrate their work frequently…” • “Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible” - Martin Fowler Before we continue… • It is important to note that Continuous Integration: – IS NOT a tool or product – IT IS a practice or philosophy that a team has to buy into • Recall: Individuals and interactions over processes and tools • Tools can be used to help automate Continuous Integration “Continuous Integration is an Attitude, Not a Tool” - James Shore Early Days • Check-in “token” – Developer wanting to check in code into the repository must acquire the “token” – Only one person can check in at a time – The same person would then check out the code on a different machine and run the build in a clean environment – If the build “breaks”, the offender fixes it on their machine and tries the verification step again – Once the build passes, the “token” is returned so someone else could perform a check in – Very serial process, time consuming Early Days • Cron / Scheduler Jobs – An attempt to automate the verification build – Schedule builds to happen during set times • Nightly or Daily Builds (quiet times) • Depending on the length of the build, you typically would want to increase the build frequency – The greater the time between scheduled builds • The less useful the feedback from the build would be • The more difficult debugging a broken build would be Present Day • CI Tools are responsible for orchestrating the verification build – Detects a change in the code repository – Update its working copy – Runs the build and executes tests – Notifies interested parties of success or failure • The repetition of these steps is known as a build cycle or build loop • Typically implemented as a server / daemon CI Tool Realizations • By automating the verification build: – The verification step is done for the committer automatically – Verification builds can be done more often • For example, after every checkin – The tool can notify the developer(s) of a broken or successful build as soon as the verification build finishes – Shorter verification build cycles means: • The developer can check in code more often (XP) • Faster feedback will lead to greater productive Typical Architecture CI for Ruby On Rails • Jay Field!s Poor Man!s CI • Continuous Builder • Cerberus • CruiseControl with CI_Reporter • CruiseControl.rb Jay Field!s Poor Man!s CI • If using Subversion, use a post-commit hook to fire off a build • Pass a revision number as an argument – Use number to create output directories for running build • If on a Mac, use Growl to send a status message to developer workstation • http://jayfields.blogspot.com/2006/07/ruby- continuous-integration.html Continuous Builder • Simple Rails plugin written by DHH • Add a Subversion post-commit hook to build the latest revision and notify the developer on success / failure by: – Email – Campfire • http://dev.rubyonrails.org/browser/plugins/con tinuous_builder Cerberus • Designed to be a light-weight CI solution with a small memory footprint – Loaded into memory and executed only when needed • Similar to previous approaches, but offers support for managing multiple projects – Command line – YML • http://cerberus.rubyforge.org/ Commands # Add application directory to monitor cerberus add directory APPLICATION_NAME=application RECIPIENTS=email address, … # Add application SVN repository to monitor cerberus add subversion_url APPLICATION_NAME=application RECIPIENTS=email address, … # List of active projects cerberus list # Build a single or all applications cerberus build application cerberus buildall # Command line help cerberus --help Files and Directories # Default home $CERBERUS_HOME=~/.cerberus # Server artifacts ~/.cerberus/config.yml ~/.cerberus/error.log # Project artifacts ~/.cerberus/config/application.yml ~/.cerberus/work/application /logs - timestamped build logs /Status.log - status of last build Build Loop • Cerberus will check if there were any changes to application directory or Subversion repository – Build only if there were • Since build and buildall are one time shots, you will either need to setup Cerberus with: – Cron (polling) – Subversion post-commit hook (trigger) CruiseControl • The defacto standard for Continuous Integration in the Java world • CruiseControl 2.6 has direct support for Rake – Leverage existing plugins • Source Code Management (SCM) systems • Publishers / Notifiers • Using CI Reporter with CruiseControl will allow for reporting on test failure • http://cruisecontrol.sourceforge.net Commands cruise_dir/cruisecontrol.sh cruise_dir/cruisecontrol.bat • Windows service now available Files and Directories # Server / Project configuration cruise_dir/config.xml # Project artifacts - can override locations cruise_dir/project.ser cruise_dir/projects/project cruise_dir/logs/project cruise_dir/artifacts/project Configuration • CruiseControl build projects are defined in cruise_dir/config.xml • Each build project has the following sections: – Bootstrappers are operations done before the build takes place, regardless if a build is necessary or not – ModificationSet is scheduled to poll to see if change in the code repository occurred – Schedule is a reoccurring event used to perform a build provided that there are modifications – Publishers distribute the results of a build – Log is used to report on the build execution CI Reporter • Can use with existing CI solutions that understand JUnit XML – CruiseControl, Bamboo, etc. • Support for Test::Unit or RSpec • http://svn.caldersphere.net/svn/main/ci_ reporter/ Files and Directories • Modify Rakefile require 'rubygems' gem 'ci_reporter’ # use the following if using RSpec require 'ci/reporter/rake/rspec’ # use the following if using Test::Unit require 'ci/reporter/rake/test_unit’ • Make ci:setup:<rspec|testunit> a dependency of your test tasks CruiseControl.rb • CruiseControl for Ruby and RoR • Written from the ground up on Rails • http://cruisecontrolrb.rubyforge.org/ Commands # Start the web server ./cruise start [options ] --port=port --binding=ip --daemon --environment=test|development|production # Add application SVN repository to monitor ./cruise add your_project --url subversion-url [--username username --password password] # Build your_project ./cruise build your_project [--trace ] # Command line help ./cruise help [command ] Files and Directories # Server artifacts cruise_dir/config/site_config.rb # Project artifacts cruise_dir/projects/your_project /work /build-rev /build.log /build_status.status /changeset.log /cruise_config.rb Build Loop • Assumption: – Rails application built by Rake • Alternatively: – Use Rake to build other applications • Ruby, Java – Could call a shell script Rake Execution • Loads all Rake files from cruise_dir/tasks and then the Rakefile of your_project • The cc:build task is invoked and looks for all other Rake tasks defined in your_project – cruise_dir/tasks/cc_build.rake Rake Execution Note: project.rake_task and project.build_command both cannot be set Build Scheduling • Specify a polling interval in the cruise_config.rb – project.scheduler.polling_interval = 5.minutes • Provide your own custom scheduler – project.scheduler = MyCustomScheduler.new(project) Build Artifacts • Artifacts are visible via dashboard • CC_BUILD_ARTIFACTS environment variable is set by CruiseControl.rb – Make sure your Rakefile task writes to this directory or in a subdirectory • Coverage reports, build products, etc. Comparison Matrix • Just the facts, please – http://rossniemi.wordpress.com/docs Slides make me sleepy… • Where is my Demo! Questions?.
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages34 Page
-
File Size-