Capistrano: il deploy in 97 secondi

Posted by Michele Tue, 21 Mar 2006 06:10:00 GMT

In principio fu il file batch; poi mi drogai con linux e benedii la bash… anni più tardi venne Ant e pensai che null’altro avrebbe potuto entusiasmarmi tanto, anche se di Maven mi innamorai quasi subito… ma questo weekend ho usato Capistrano.

E’ amore.

Questo utile giocattolo permette di automatizzare la maggior parte delle azioni di deploy su un server remoto, direttamente dalla nostra console locale; in realtà le funzionalità sono mooolto più potenti di queste e si spingono fino all’esecuzione di task arbitrari su più macchine, ma avremo modo di approfondire in un prossimo post.

Ingredienti

Al pari di altri tool basati su rake, l’esecuzione di Capistrano fa una serie di assunzioni:

  • Devo connettermi con almeno un server remoto
  • La connessione viene fatta attraverso ssh
  • Il server supporta comandi POSIX (shell come csh, tcsh o Windows stesso non rientrano in questa categoria)
  • In caso di server multipli la password deve essere la stessa su tutte le macchine
  • Posso avere necessità di dover fare azioni diverse su macchine diverse

Anche se nasce pensato a rails, nessuno vieta di utilizzare capistrano per deploy di altri applicativi web oppure per il semplice management.

Preparazione

Una volta installato (si può fare comodamente con

gem install capistrano

avendo l’accortezza di installare anche tutte le dipendenze) il primo passo da compiere è aggiungere il supporto ad un’applicazione rails esistente:

cap—apply-to ‘path’

dove ‘path’ indica il percorso della root directory; a questo punto vi troverete il file script/deploy.rb pronto per essere personalizzato. I parametri essenziali sono

set :application, "My happy Blog!"
set :repository,  "http://svn.miosito.eu/happyness/trunk"

role :app,        "blog.miosito.eu"
role :web,        "blog.miosito.eu"
role :db,         "blog.miosito.eu"

set :deploy_to,   "/var/www/rails/"

dove le prime due righe indicano rispettivamente il nome dell’applicativo (arbitrario) e l’url del repository subversion dal quale verranno prelevati i sorgenti, mentre le tre impostazioni dei ruoli specificano i server da usare.

L’ultimo parametro definisce la directory (remota) dove verrà fatto il deploy.

Prima di cominciare con la ricetta vera e propria è necessario preparare il file system sul server di deploy; come? così:

rake remote:setup

ovviamente all’utente deve essere permesso l’accesso in scrittura alla directory indicata dal parametro :deploy_to.

L’utente della vostra macchina non è quello del server? nessun problema, potete personalizzare anche quello con il parametro

set :user, "attila"

La ricetta

Per passare all’azione è sufficiente lanciare

rake deploy

metterà online l’ultima versione dell’applicativo prelevata dal repository. Tutto qui ;-)

Se avete contravvenuto alla regola aurea dell’IT1 smettete di bestemmiare sudare e lanciate

rake rollback

per ripristinerete in un lampo la versione che era precedentemente online.

NB: ricordate che ogni azione di deploy crea sul server una cartella con una copia funzionante del vostro applicativo, quindi dopo alcune release potrebbe essere salutare eliminare le copie più vecchie per risparmiare spazio su disco. Potete farlo dalla vostra poltrona preferita lanciando

rake remote:cleanup

in modo da pulire tutte le versioni tranne le ultime cinque.

Ammetto che non ci ho messo esattamente 97 secondi, ma mi avanzano ancora alcuni dei minuti che Capistrano mi ha fatto risparmiare. Moltiplicato per il numero di deploy settimanali credo di avere a disposizione una mezz’oretta… suggerimenti su come investirla?

1 Se tutto funziona non lo toccare. Se lo hai toccato e funzionava, sei spacciato.

Posted in  | Tags , ,  | 3 comments | no trackbacks

Trackbacks

Use the following link to trackback from your own site:
http://blog.seesaw.it/articles/trackback/40

Comments

  1. Avatar Paolo said about 9 hours later:

    Complimenti per l’ottimo post! Se c’è una qualità che va riconosciuta a chi sviluppa ste cose in Ruby è proprio la pragmaticità. Con Maven ad esempio è possibile fare tutto ciò che hai fatto con Capistrano ma non in modo così, diciamo, naturale.

  2. Avatar magomarcelo said 391 days later:

    beh a questo punto io che di maven ne conosco la superficie divento curioso su come si potrebbe impostare la ricetta duale… un automated deployment transazionale mi sembra un obiettivo ideale, ma io ho già sudato camicie per capire come modificare le properties per target environment in maven…

  3. Avatar Michele said 394 days later:

    un ottimo punto di partenza potrebbe essere questo ;-) scritto direttamente dagli autori di maven2

Comments are disabled


SeeSaw srl - Via Monte Pasubio, 8 37126 Verona - tel +39 045 4857457 fax 045 4851151 P.Iva 03609790237