Déployer vers de multiples environnements avec Capistrano Multi-Stage Extension | blogatom.

Il est possible avec Capistrano de gérer plusieurs environnements cible pour le déploiement d'une application, grâce à l'extension “Multi-Stage”. Voici un résumé de la mise en oeuvre, pour une application Sinatra en l'occurence.

Tout d'abord, installons la gem:

gem install capistrano-ext

Puis je vais modifier mon Capfile pour ajouter la définition de mes différents stages, le stage par défaut, et charger l'extension:

set :stages, %w(production staging)
set :default_stage, "staging"
require 'capistrano/ext/multistage'

A part ça, je laisse le reste de mon Capfile inchangé ; je vais typiquement y trouver des choses comme :

set :domain, 'toto.com'
set :application, "mon_appli"

set :repository, "git@github.com:tomconte/monappli.git" set :scm, :git set :branch, "master" set :deploy_via, :remote_cache ssh_options[:forward_agent] = true

Et je vais maintenant déplacer dans des fichiers de configuration séparés les valeurs qui changent entre mes stages, par exemple ici, les adresses des serveurs (qui seront différents en production et en staging).

Ces fichiers doivent être rangés dans config/deploy :

mkdir -p config/deploy

Et je vais par exemple mettre dans production.rb :

set :user, 'ec2-user'
role :web, "ec2-xx-xx-xx-xx.eu-west-1.compute.amazonaws.com"

Et ceci dans staging.rb :

set :user, 'tomconte'
role :web, "toto.dedibox.fr"

Dans mon cas, j'ai des utilisateurs différents pour mes différentes machines, j'inclus donc également le paramètre :user.

Pour cibler les différents environnements, il suffit alors de faire cap staging deploy ou cap production deploy.