Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
 
·   ¿Qué es Capistrano? Según la Wikipedia: Capistrano is an open source tool for running scripts on multiple servers; its...
Puede automatizar cualquier* comando SSH
·   Regreso al pasado ...son las tantas de la tarde... ...tienes ganas de dejarlo por hoy... ...has quedado para tomar alg...
Te toca Despliegue... colgar cartel de cerrado... parar servicios... actualizar código... ejecutar migraciones... reinicia...
·   Introducción ...Gota de sudor frío por la sien... ...Taquicardia... ...ansiedad... ... ¡¡SOCORRO!! ·   R egreso al pas...
·   Pasado Application Deployment with Rails Posted by Jamis on July 14, 2005 @ 12:48 PM Introducing SwitchTower Posted by...
·   Presente
·   Presente ·   Lee Hambley @leehambley Actualmente trabaja en Xing AG E-Mail:  [email_address] Blog:  http://lee.hambley...
Estructura de Capistrano $ gem dependency capistrano Gem capistrano-2.5.10 net-ssh (>= 2.0.14, runtime) net-sftp (>= 2.0.0...
Instalación $ gem install capistrano
Instalación $ mkdir foo $ capify foo
Ejecución de tareas En nuestro deploy.rb: task :whoami do run 'whoami' end $ cap whoami
Ejecución de tareas Nuestra segunda tarea: task :whatispolitics do run 'whatis politics' end $ cap whatispolitics
Tareas encadenadas task :freespace do run 'df -h' end task :my_files_usage do run 'cd ~ ; du -h' end
Tareas encadenadas $ cap freespace my_files_usage
Tareas encadenadas task 'check-ruby-version' do cmd = 'ruby --version' local_ruby = run_locally(cmd) remote_ruby = capture...
Tareas encadenadas $ cap freespace whatispolitics my_files_usage
Tareas encadenadas Para siempre* en la primera tarea que falla
Listados de tareas $ cap -T $ cap -vT $ cap -e deploy $ cap -e my_files_usage
Listados de tareas desc “Muestra el espacio libre” task :freespace do run 'df -h' end desc “Mis ficheros ocupan...” task :...
Listados de tareas $ cap -T $ cap -vT $ cap -e my_files_usage
Definir tareas nuevas La manera mas simple: task :whoami do run 'whoami' end
Definir tareas nuevas Limitando por roles: task :whoami, :roles => [:web,:app] do run 'whoami' end
Definir tareas nuevas Limitando por hosts: task :whoami, :hosts => 'rgo@vapor.aspgems.com' do run 'whoami' end
Definir tareas nuevas Otras opciones: :max_hosts => 3 :on_error => :continue :except => [:no_release => true] :only => [:m...
Namespaces Ejemplos: namespace :deploy do task :enable_everything do deploy.web.enable end end
Namespaces namespace :deploy do task :enable_everything do deploy.web.enable end namespace :web do task :enable, :roles =>...
Namespaces ¿Cómo invocamos las tareas? after "deploy:migrate", "deploy:web:enable" task :enable_everyt...
Roles Como definir los roles: role :role_name, 'host1' role : role_name2, 'host2', 'host3'
Roles role :web, 'web.mor.org' role :app, 'app1.mor.org', 'app2.mor.org' task :some_task, :role => :web do # runs only on ...
Roles Filtrando hosts con except/only: role :db, "db.mor.org", :master => true task :migrate, :roles => :db, :on...
La terminal es nuestra amiga... … y como hablar con ella
Run Ejecuta el comando en uno o mas servidores: run "uptime" run "#{sudo} apachectl restart" run &quot...
Capture Helper usado para capturar la salida de comandos(en un servidor): version = capture("cat /u/apps/mor/current/...
Stream Captura la salida de comandos con mucho texto (por ej. tail o grep): stream "#{sudo} tail -f /var/log/apache2/...
Prompts set(:scm_username) do  capistrano::CLI.ui.ask("Type your svn username: ") end set(:scm_password) do Capi...
¡Subiendo! - Upload Transfiere ficheros/directorios de localhost a servidores remotos: upload 'mailer.yml', 'config/initil...
¡Subiendo! - Put Sube el contenido de una cadena como un fichero: config = { "adapter"  => "mysql", &q...
¡Bajando! - Download Todo lo contrario a upload :)   download(/"etc/hosts", "downloads/hosts-$CAPISTRANO:HO...
¡Bajando! - Get Transfiere un fichero de un solo servidor remoto a nuestra máquina local: get "/etc/hosts", &quo...
Stdout, stderror, ... task 'passenger-install-apache2-module' do run 'passenger-install-apache2-module' do |channel, strea...
·   El camino del “Deploy” ·   El camino del “Deploy”
1. capify 2. cap deploy:setup 3. cap deploy:check 4. cap deploy:cold 5. cap deploy ·   El camino del “Deploy”
1. capify 2. cap deploy:setup 3. cap deploy:check 4. cap deploy:cold 5. cap deploy ·   El camino del “Deploy”
1. capify 2. cap deploy:setup 3. cap deploy:check 4. cap deploy:cold 5. cap deploy ·   El camino del “Deploy”
1. capify 2. cap deploy:setup 3. cap deploy:check 4. cap deploy:cold 5. cap deploy ·   El camino del “Deploy”
1. capify 2. cap deploy:setup 3. cap deploy:check 4. cap deploy:cold 5. cap deploy ·   El camino del “Deploy”
cap deploy:migrations cap deploy:rollback cap deploy:cleanup ·   El camino del “Deploy”
Checkout (por defecto) Export Copy Remote Cache SCM none  Estrategias
http://github.com/rgo/capistrano-generic-template Una receta mejorada
¿Preguntas?
¡Gracias!
ENLACES DE INTERÉS Capistrano   http://capify.org Capistrano Mailing list http://groups.google.co.uk/group/capistrano API ...
 
Upcoming SlideShare
Loading in …5
×

Taller de Capistrano

2,508 views

Published on

Presentación usada en el taller de Capistrano de la Conferencia Rails 2009.

Published in: Technology
  • Be the first to comment

Taller de Capistrano

  1. 2. · ¿Qué es Capistrano? Según la Wikipedia: Capistrano is an open source tool for running scripts on multiple servers; its main use is deploying web applications. It automates the process of making a new version of an application available on one or more web servers, including supporting tasks such as changing databases. ... http://en.wikipedia.org/wiki/Capistrano · ¿Qué es Capistrano?
  2. 3. Puede automatizar cualquier* comando SSH
  3. 4. · Regreso al pasado ...son las tantas de la tarde... ...tienes ganas de dejarlo por hoy... ...has quedado para tomar algo... ...peeero...!
  4. 5. Te toca Despliegue... colgar cartel de cerrado... parar servicios... actualizar código... ejecutar migraciones... reiniciar otros servicios... volver a arrancar ... quitar cartel el cartel de cerrado... Ejecutas comandos... bueno lo intentas... repite la operación... sale mal de nuevo... El parche milagroso que intentaba instalar no funciona! · R egreso al pasado
  5. 6. · Introducción ...Gota de sudor frío por la sien... ...Taquicardia... ...ansiedad... ... ¡¡SOCORRO!! · R egreso al pasado
  6. 7. · Pasado Application Deployment with Rails Posted by Jamis on July 14, 2005 @ 12:48 PM Introducing SwitchTower Posted by Jamis on August 05, 2005 @ 05:43 PM SwitchTower: Renamed Posted by Jamis on March 05, 2006 @ 05:49 PM Net::SSH, Capistrano, and Saying Goodbye Posted by Jamis on February 24, 2009 @ 09:38 PM · Regreso al pasado
  7. 8. · Presente
  8. 9. · Presente · Lee Hambley @leehambley Actualmente trabaja en Xing AG E-Mail: [email_address] Blog: http://lee.hambley.name/ · Presente · Lee Hambley E-Mail: [email_address] Blog: http://lee.hambley.name/
  9. 10. Estructura de Capistrano $ gem dependency capistrano Gem capistrano-2.5.10 net-ssh (>= 2.0.14, runtime) net-sftp (>= 2.0.0, runtime) net-scp (>= 1.0.0, runtime) net-ssh-gateway (>= 1.0.0, runtime) highline (>= 0, runtime) mocha (>= 0, development)
  10. 11. Instalación $ gem install capistrano
  11. 12. Instalación $ mkdir foo $ capify foo
  12. 13. Ejecución de tareas En nuestro deploy.rb: task :whoami do run 'whoami' end $ cap whoami
  13. 14. Ejecución de tareas Nuestra segunda tarea: task :whatispolitics do run 'whatis politics' end $ cap whatispolitics
  14. 15. Tareas encadenadas task :freespace do run 'df -h' end task :my_files_usage do run 'cd ~ ; du -h' end
  15. 16. Tareas encadenadas $ cap freespace my_files_usage
  16. 17. Tareas encadenadas task 'check-ruby-version' do cmd = 'ruby --version' local_ruby = run_locally(cmd) remote_ruby = capture(cmd) unless local_ruby == remote_ruby warn "Warning: Different Ruby Versions: ” warn “Local: #{local_ruby} Remote: #{remote_ruby}" exit(1) end end $ cap freespace check-ruby-version my_files_usage
  17. 18. Tareas encadenadas $ cap freespace whatispolitics my_files_usage
  18. 19. Tareas encadenadas Para siempre* en la primera tarea que falla
  19. 20. Listados de tareas $ cap -T $ cap -vT $ cap -e deploy $ cap -e my_files_usage
  20. 21. Listados de tareas desc “Muestra el espacio libre” task :freespace do run 'df -h' end desc “Mis ficheros ocupan...” task :my_files_usage do run 'cd ~ ; du -h' end
  21. 22. Listados de tareas $ cap -T $ cap -vT $ cap -e my_files_usage
  22. 23. Definir tareas nuevas La manera mas simple: task :whoami do run 'whoami' end
  23. 24. Definir tareas nuevas Limitando por roles: task :whoami, :roles => [:web,:app] do run 'whoami' end
  24. 25. Definir tareas nuevas Limitando por hosts: task :whoami, :hosts => 'rgo@vapor.aspgems.com' do run 'whoami' end
  25. 26. Definir tareas nuevas Otras opciones: :max_hosts => 3 :on_error => :continue :except => [:no_release => true] :only => [:master => true]
  26. 27. Namespaces Ejemplos: namespace :deploy do task :enable_everything do deploy.web.enable end end
  27. 28. Namespaces namespace :deploy do task :enable_everything do deploy.web.enable end namespace :web do task :enable, :roles => :web do # … end end end
  28. 29. Namespaces ¿Cómo invocamos las tareas? after "deploy:migrate", "deploy:web:enable" task :enable_everything do deploy.web.enable end
  29. 30. Roles Como definir los roles: role :role_name, 'host1' role : role_name2, 'host2', 'host3'
  30. 31. Roles role :web, 'web.mor.org' role :app, 'app1.mor.org', 'app2.mor.org' task :some_task, :role => :web do # runs only on web server end task :some_other_task, :role => :app do # runs on both app servers in parallel end task :global_task do # runs on all three servers in parallel end
  31. 32. Roles Filtrando hosts con except/only: role :db, "db.mor.org", :master => true task :migrate, :roles => :db, :only => { :master => true } do # … end
  32. 33. La terminal es nuestra amiga... … y como hablar con ella
  33. 34. Run Ejecuta el comando en uno o mas servidores: run "uptime" run "#{sudo} apachectl restart" run "ln -s config/mailer-$CAPISTRANO:HOST$.conf /app/config/initializer/mailer.conf"
  34. 35. Capture Helper usado para capturar la salida de comandos(en un servidor): version = capture("cat /u/apps/mor/current/REVISION")
  35. 36. Stream Captura la salida de comandos con mucho texto (por ej. tail o grep): stream "#{sudo} tail -f /var/log/apache2/access.log" stream "ls -l / 2>&1"
  36. 37. Prompts set(:scm_username) do capistrano::CLI.ui.ask("Type your svn username: ") end set(:scm_password) do Capistrano::CLI.password_prompt("Type your svn password: ") End
  37. 38. ¡Subiendo! - Upload Transfiere ficheros/directorios de localhost a servidores remotos: upload 'mailer.yml', 'config/initiliazer/mailer.yml'
  38. 39. ¡Subiendo! - Put Sube el contenido de una cadena como un fichero: config = { "adapter" => "mysql", "database" => "mor_prod", "host" => "db.mor", "username" => "mor", "password" => "mor-password" } put config.to_yaml, "/apps/mor/current/config/database.yml"
  39. 40. ¡Bajando! - Download Todo lo contrario a upload :) download(/"etc/hosts", "downloads/hosts-$CAPISTRANO:HOST$")
  40. 41. ¡Bajando! - Get Transfiere un fichero de un solo servidor remoto a nuestra máquina local: get "/etc/hosts", "downloads/hosts" download "/etc/hosts", "downloads/hosts", :once => true
  41. 42. Stdout, stderror, ... task 'passenger-install-apache2-module' do run 'passenger-install-apache2-module' do |channel, stream, data| break if stream == :err if data =~ /Press Enter to continue/ channel.send(' ') elsif data =~ /Which Ruby would you like to install against?/ channel.send('/opt/local/bin/ruby1.9') else # Capistrano::Configuration.default_io_proc.call[channel, stream, output] puts '#{channel[:host]}: #{data}' end end end
  42. 43. · El camino del “Deploy” · El camino del “Deploy”
  43. 44. 1. capify 2. cap deploy:setup 3. cap deploy:check 4. cap deploy:cold 5. cap deploy · El camino del “Deploy”
  44. 45. 1. capify 2. cap deploy:setup 3. cap deploy:check 4. cap deploy:cold 5. cap deploy · El camino del “Deploy”
  45. 46. 1. capify 2. cap deploy:setup 3. cap deploy:check 4. cap deploy:cold 5. cap deploy · El camino del “Deploy”
  46. 47. 1. capify 2. cap deploy:setup 3. cap deploy:check 4. cap deploy:cold 5. cap deploy · El camino del “Deploy”
  47. 48. 1. capify 2. cap deploy:setup 3. cap deploy:check 4. cap deploy:cold 5. cap deploy · El camino del “Deploy”
  48. 49. cap deploy:migrations cap deploy:rollback cap deploy:cleanup · El camino del “Deploy”
  49. 50. Checkout (por defecto) Export Copy Remote Cache SCM none Estrategias
  50. 51. http://github.com/rgo/capistrano-generic-template Una receta mejorada
  51. 52. ¿Preguntas?
  52. 53. ¡Gracias!
  53. 54. ENLACES DE INTERÉS Capistrano http://capify.org Capistrano Mailing list http://groups.google.co.uk/group/capistrano API http://www.capify.org/index.php/API_Documentation Capistrano at your command http://www.slideshare.net/leehambley/intermediate-capistrano Commanding your SSH universe with Capistrano http://en.oreilly.com/oscon2008/public/schedule/detail/3087

×