Conferencia Rails: Integracion Continua Y Rails
Upcoming SlideShare
Loading in...5
×
 

Conferencia Rails: Integracion Continua Y Rails

on

  • 3,692 views

 

Statistics

Views

Total Views
3,692
Views on SlideShare
3,410
Embed Views
282

Actions

Likes
4
Downloads
23
Comments
0

3 Embeds 282

http://11870.com 275
http://www.slideshare.net 6
http://www.google.com.mx 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Conferencia Rails: Integracion Continua Y Rails Conferencia Rails: Integracion Continua Y Rails Presentation Transcript

  • Integración Continua y Rails David Calavera 11870.com
  • ego slide • desarrollador en 11870.com • open source: Hudson, Netbeans • commiter de la Fundación Apache
  • sobre mi View slide
  • sobre la charla View slide
  • sobre que NO trata esta charla
  • nada que nos enganche Texto más a Rails
  • como configurar un servidor de CI
  • sobre que trata esta charla
  • usar menos herramientas
  • automatizar tareas
  • calidad del código
  • ¿qué es integración continua?
  • “ practica de reunir el código que estamos desarrollando frecuentemente, para verificarlo y evitar errores ” David Calavera
  • “ 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 test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly ” reduced integration problems and allows a team to develop cohesive software more rapidly. Martin Fowler
  • ¿para qué sirve?
  • reducir riesgos
  • falta de cohesión
  • descubrir errores pronto http://www.agitar.com/solutions/why_unit_testing.html
  • baja calidad del código
  • evitar repetir procesos manuales
  • generar deploys en cualquier momento
  • automatizar el build • reducir el número de procesos manuales • ¡¡Rails --tasks --silent | wc -l a ejecutar!! incorpora 71 tareas • rake • ¡¡Capistrano añade 22 -tareas más!! • expr `cap --tasks | wc -l` 7
  • ¡¡autodestrucción!!
  • reducir su duración • usar una máquina dedicada para CI • mejorar el rendimiento de nuestros tests • separar los tests por categorías • ejecutar el build por etapas
  • ejecutar los test en paralelo • sudo gem install deep_test DeepTest::TestTask.new 'deep_test:functionals' do |t| t.pattern = quot;test/functional/**/*_test.rbquot; t.number_of_workers = 2 end
  • ejecutar los test en paralelo • también para RSpec Spec::Rake::SpecTask.new 'deep_spec:functionals' do |t| t.spec_files = FileList['spec/functional/**/*_spec.rb'] t.deep_test :number_of_workers => 2 end
  • ejecutar los test en paralelo • ¡con una base de datos para cada worker! DeepTest::TestTask.new 'deep_test:functionals' do |t| t.pattern = quot;test/functional/**/*_test.rbquot; t.worker_listener = 'DeepTest::Database::MysqlSetupListener' end
  • usar un servidor de CI • preguntar por cambios en el repositorio • realizar acciones en horarios determinados • soportar diferentes herramientas • mostrar builds históricos • soportar diferentes tipos de informes • soportar diferentes tipos de notificaciones
  • CruiseControl.rb
  • CruiseControl.rb • muy POCO “user friendly” • plugins perdidos por internet • pero muy fáciles de desarrollar • http://cruisecontrolrb.thoughtworks.com
  • Hudson
  • Hudson • MUY “user friendly” • plugins muy fácilmente localizables • pero algo más complicado de desarrollar • http://hudson.dev.java.net
  • Run Code Run •
  • Run Code Run • de momento solo proyectos open source • de momento solo se integra con github • soporte de CI para la última Rails Rumble • http://runcoderun.com
  • mejorar la perspectiva
  • aumentar la confianza
  • ¿cuáles son las reglas básicas?
  • commit frecuente
  • no subir código roto
  • arreglar el build inmediatamente
  • escribir test automáticos
  • hacer builds en local
  • evitar usar código roto
  • ¿qué pasos hay que seguir para montar un sistema de CI?
  • 1. integración de la base de datos
  • lo que hay que hacer • automatizar los cambios de la base de datos • crear la base de datos • modificar la base de datos • testing e inspección
  • Migraciones • muchas mejoras desde Rails 2.1 create db/migrate/20081112232842_modify_user.rb class ModifyUser < ActiveRecord::Migration def self.up change_table :user do |user| t.rename :surname, :last_name t.remove :age ... end end end
  • 2. Testing continuo
  • test unitarios • enfocados en un objeto • comprobar installes totalmente unitario que • sudo gem unit_record ActiveRecord::Base.disconnect! • usar mocks en lugar de fixtures
  • test unitarios • ¡¡hay que hacerlos para cualquier clase!! •sudo gem install unit_controller def setup @controller = UserController.new @controller.do_not_render_vew end
  • test funcionales • usa factories en lugar de fixtures • sudo gem install thoughtbot-factory_girl Factory.define :user do |u| u.first_name 'Joe' u.last_name 'Doe' u.email {|att| quot;#{att.first_name}@example.comquot;.downcase } end
  • test funcionales • ¡¡hay que hacerlos modelotodas lasde datos para clases!! • interacción entre el y la base • interacción entre el modelo y el controlador • interacción entre el controlador y la vista
  • 3. Inspección continua
  • reducir la complejidad • Flog def flog(output, *directories) `find #{directories.join(quot; quot;)} -name *.rb|xargs flog > #{RAILS_ROOT}/tmp/flog/#{output}.txt` end desc quot;Flog models, controller, helpers and libquot; task :flog do flog quot;allquot;, *%w[app/models app/controllers app/helpers lib] end
  • eliminar código duplicado o sin usar • Dust def unused_lvar a = 1 1 + 2 end d = Dust::LocalVariableDuster.new(Object, :unused_lvar) d.dust! d.warnings
  • eliminar código duplicado o sin usar • PMD-CPD def cpd(*directories) `java net.sourceforge.pmd.cpd.CPD --minimum-tokens 100 -files #{directories.map(quot; --files quot;)} --language ruby` end task :cpd do cpd *%w[app/models app/controllers app/helpers lib] end
  • comprobar cobertura • Rcov desc 'Test coverage report' task :coverage do rm_f quot;coveragequot; rm_f quot;coverage.dataquot; rcov = quot;rcov --rails --aggregate coverage.data -Ilibquot; `#{rcov} --no-html test/unit/*_test.rb` `#{rcov} --no-html test/functional/*_test.rb` `#{rcov} --html test/integration/*_test.rb` `open coverage/index.html` if PLATFORM['darwin'] end
  • all in one • Metrics_fu para cruisecontrol.rb • Saikuro • Flog • Rcov • Rails stats • RubyMetrics para hudson • Rcov • Rails stats
  • revisión de código
  • 4. Deploy continuo
  • deploy continuo • etiquetar el repositorio • producir un entorno limpio • etiquetar cada build • tener la capacidad de volver atrás
  • 5. Feedback continuo
  • feedback continuo • la información correcta • a la persona indicada • en el momento esperado • de la forma correcta
  • ¿alguna pregunta?
  • Fotos • http://flickr.com/photos/chicanerii/507573394 • http://flickr.com/photos/3epmedia/1160364177 • http://flickr.com/photos/cathycracks/183170786 • http://flickr.com/photos/smitty/2245445147/ • http://flickr.com/photos/fcw/384316867/ • http://www.flickr.com/photos/auxesis/2965947278/ • http://www.flickr.com/photos/penguin_man44/1203331011/ • http://flickr.com/photos/rekha6/2902282813/ • http://flickr.com/photos/teepee1/1508261796/ • http://flickr.com/photos/teepee1/2614839885/ • http://flickr.com/photos/_saturnine/2294717858/ • http://flickr.com/photos/ezra/459279198/ • http://flickr.com/photos/x180/1397019888 • http://flickr.com/photos/soulcheck/384769773/ • http://flickr.com/photos/znachor/255143511/ • http://flickr.com/photos/julianbleecker/156303245/