Vous aurez besoin de patcher le Capistrano code si vous souhaitez faire des choses différentes avec les codes de sortie, c'est codé en dur pour lever une exception si le statut de sortie n'est pas nulle.
Voici la partie pertinente de lib/capistrano/commande.rb. La ligne commençant par if (failed
... est le plus important. Fondamentalement, il dit si il y a toute différente de zéro les valeurs de retour, générer une erreur.
# Processes the command in parallel on all specified hosts. If the command
# fails (non-zero return code) on any of the hosts, this will raise a
# Capistrano::CommandError.
def process!
loop do
break unless process_iteration { @channels.any? { |ch| !ch[:closed] } }
end
logger.trace "command finished" if logger
if (failed = @channels.select { |ch| ch[:status] != 0 }).any?
commands = failed.inject({}) { |map, ch| (map[ch[:command]] ||= []) << ch[:server]; map }
message = commands.map { |command, list| "#{command.inspect} on #{list.join(',')}" }.join("; ")
error = CommandError.new("failed: #{message}")
error.hosts = commands.values.flatten
raise error
end
self
end