[DevOps] Deploy automatizzato con Capistrano

In applicazioni complesse diventa difficile gestire il workflow di release di nuove versioni dell’applicativo ed essendo operazioni noiose, fatte di rado l’errore umano diventa elevato.

Prima di tutto è necessario installare Capistrano, in più un componente essenziale per poter gestire più repository e deploy complessi è caphub.

Una volta installato, create un nuovo progetto

caphub nuova-directory-capistrano

 

Dopodichè dovete procedere a creare una struttura simile a questa, creando tante cartelle quanti sono i progetti che volete deployare.

[mysitedeploy]$ tree dirsfirst
.
├── config
│   ├── deploy
│   │   ├── billing
│   │   │   ├── production.rb
│   │   │   └── staging.rb
│   │   ├── core
│   │   │   ├── production.rb
│   │   │   └── staging.rb
│   │   └── customer
│   │      ├── production.rb
│   │      └── staging.rb
│   ├── keys
│   └── deploy.rb
├── recipes
├── Capfile
└── Gemfile
Adesso non resta che configurare globalmente il deploy editando il file config/deploy.rb che avrà una contenuto del genere:
#
# Put here shared configuration shared among all children
#
# Read more about configurations:
# https://github.com/railsware/capistrano-multiconfig/blob/master/README.md
ask :branch, ‘master’
set :application, proc { fetch(:stage).split(‘:’).reverse[1] }
set :repo_url, proc { “git@bitbucket.org/my-company/#{fetch(:application)}.git” }
set :deploy_to, proc { “/var/www/#{fetch(:application_dir)}” }
set :scm, :git
set :format, :pretty
set :log_level, :debug
set :pty, true
#set :linked_files, %w{config/database.yml}
#set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}
set :default_env, { path: “/opt/ruby/bin:$PATH” }
Oltre a questo è necessario configurare i file ruby di staging e production per far in modo di fare il deploy corretto:
set :application, ‘my-repository’
set :application_dir, ‘my-repository-dir’server ‘192.168.10.137’, user: ‘capistranodeploy’, port: 22, password: ‘capistranodeploy’, roles: %w{core}
Adesso col seguente comando verrà fatto il deploy dell’ultima versione del codice (dobbiamo premettere che in quella cartella deve essere già presente un repository git valido)
cap <nome app>:<production/staging> deploy
esempio:
cap core:production deploy
Questa è una configurazione di esempio molto basilare, è però possibile estendere in molti modi le potenzialità di Capistrano.
Ad esempio sono presenti plugin per gestire il deploy dei tag git, cosa molto importante e molto utilizzata in diverse applicazioni.
Inoltre è possibile gestire anche il deploy automatico di server cosi da poter clonare repository, installare pacchetti e tante altre applicazioni per ridurre le operazioni macchinose e permetterci di concentrarci sui veri problemi di sviluppo.

Start typing and press Enter to search