Conferencia Rails: Integracion Continua Y Rails

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    2 Favorites

    Conferencia Rails: Integracion Continua Y Rails - Presentation Transcript

    1. Integración Continua y Rails David Calavera 11870.com
    2. ego slide • desarrollador en 11870.com • open source: Hudson, Netbeans • commiter de la Fundación Apache
    3. sobre mi
    4. sobre la charla
    5. sobre que NO trata esta charla
    6. nada que nos enganche Texto más a Rails
    7. como configurar un servidor de CI
    8. sobre que trata esta charla
    9. usar menos herramientas
    10. automatizar tareas
    11. calidad del código
    12. ¿qué es integración continua?
    13. “ practica de reunir el código que estamos desarrollando frecuentemente, para verificarlo y evitar errores ” David Calavera
    14. “ 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
    15. ¿para qué sirve?
    16. reducir riesgos
    17. falta de cohesión
    18. descubrir errores pronto http://www.agitar.com/solutions/why_unit_testing.html
    19. baja calidad del código
    20. evitar repetir procesos manuales
    21. generar deploys en cualquier momento
    22. 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
    23. ¡¡autodestrucción!!
    24. 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
    25. ejecutar los test en paralelo • sudo gem install deep_test DeepTest::TestTask.new 'deep_test:functionals' do |t| t.pattern = \"test/functional/**/*_test.rb\" t.number_of_workers = 2 end
    26. 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
    27. ejecutar los test en paralelo • ¡con una base de datos para cada worker! DeepTest::TestTask.new 'deep_test:functionals' do |t| t.pattern = \"test/functional/**/*_test.rb\" t.worker_listener = 'DeepTest::Database::MysqlSetupListener' end
    28. 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
    29. CruiseControl.rb
    30. CruiseControl.rb • muy POCO “user friendly” • plugins perdidos por internet • pero muy fáciles de desarrollar • http://cruisecontrolrb.thoughtworks.com
    31. Hudson
    32. Hudson • MUY “user friendly” • plugins muy fácilmente localizables • pero algo más complicado de desarrollar • http://hudson.dev.java.net
    33. Run Code Run •
    34. 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
    35. mejorar la perspectiva
    36. aumentar la confianza
    37. ¿cuáles son las reglas básicas?
    38. commit frecuente
    39. no subir código roto
    40. arreglar el build inmediatamente
    41. escribir test automáticos
    42. hacer builds en local
    43. evitar usar código roto
    44. ¿qué pasos hay que seguir para montar un sistema de CI?
    45. 1. integración de la base de datos
    46. 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
    47. 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
    48. 2. Testing continuo
    49. test unitarios • enfocados en un objeto • comprobar installes totalmente unitario que • sudo gem unit_record ActiveRecord::Base.disconnect! • usar mocks en lugar de fixtures
    50. test unitarios • ¡¡hay que hacerlos para cualquier clase!! •sudo gem install unit_controller def setup @controller = UserController.new @controller.do_not_render_vew end
    51. 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| \"#{att.first_name}@example.com\".downcase } end
    52. 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
    53. 3. Inspección continua
    54. reducir la complejidad • Flog def flog(output, *directories) `find #{directories.join(\" \")} -name \\\\*.rb|xargs flog > #{RAILS_ROOT}/tmp/flog/#{output}.txt` end desc \"Flog models, controller, helpers and lib\" task :flog do flog \"all\", *%w[app/models app/controllers app/helpers lib] end
    55. 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
    56. eliminar código duplicado o sin usar • PMD-CPD def cpd(*directories) `java net.sourceforge.pmd.cpd.CPD --minimum-tokens 100 -files #{directories.map(\" --files \")} --language ruby` end task :cpd do cpd *%w[app/models app/controllers app/helpers lib] end
    57. comprobar cobertura • Rcov desc 'Test coverage report' task :coverage do rm_f \"coverage\" rm_f \"coverage.data\" rcov = \"rcov --rails --aggregate coverage.data -Ilib\" `#{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
    58. all in one • Metrics_fu para cruisecontrol.rb • Saikuro • Flog • Rcov • Rails stats • RubyMetrics para hudson • Rcov • Rails stats
    59. revisión de código
    60. 4. Deploy continuo
    61. deploy continuo • etiquetar el repositorio • producir un entorno limpio • etiquetar cada build • tener la capacidad de volver atrás
    62. 5. Feedback continuo
    63. feedback continuo • la información correcta • a la persona indicada • en el momento esperado • de la forma correcta
    64. ¿alguna pregunta?
    65. 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/

    + David CalaveraDavid Calavera, 2 years ago

    custom

    1108 views, 2 favs, 1 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 1108
      • 1044 on SlideShare
      • 64 from embeds
    • Comments 0
    • Favorites 2
    • Downloads 10
    Most viewed embeds
    • 64 views on http://11870.com

    more

    All embeds
    • 64 views on http://11870.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories