Mina - un Capistrano light

Publié le 17 Fev 2016 par Tony

Light, mais solide … Mina permet de déployer via git/ssh assez facilement

Comparable à Vlad ou Capistrano, Mina (http://nadarei.co/mina/) a l’avantage de ne créer qu'une seule session SSH par "déployer" , réduisant ainsi la surcharge de connexion SSH. Pour ce site, généré avec Middleman (https://middlemanapp.com), je l’ai préféré à Capristarno. J’ai légèrement modifié la marche suivre (officielle) détaillée ici (https://github.com/mina-deploy/mina), j'explique comment un peu plus bas.

Installation et configuration de Mina :
$ gem install mina
Puis dans le répertoire du projet :
$ gem install mina

Cette dernière action crée un fichier config/deploy.rb, voici le mien en exemple :

require 'mina/bundler'
require 'mina/rails'
require 'mina/git'
set :domain, ‘IPSERVER'
set :deploy_to, ‘PATH'
set :repository, ‘REPO’
set :branch, 'master'
set :term_mode, nil
set :shared_paths, ['log']
set :user, ‘USERSSH'
set :forward_agent, true

desc "Deploys the current version to the server."
task :deploy => :environment do
deploy do
invoke :'git:clone'
# invoke :'bundle:install'
# queue "bundle exec middleman build"
set :keep_releases, 1
# invoke :'deploy:cleanup'
end
end
Mise en place de la structure du dossier, validation SSH … :
$ mina setup
-----> Creating folders... done.
Normalement, il vous suffit ensuite de faire un … :
$ mina deploy
-----> Deploying to 2012-06-12-040248
...
Lots of things happening...
...
-----> Done.

… pour déployer sur votre serveur votre repo, puis de le compiler à la volée. Pour ma part, j’ai volontairement commenté la ligne "invoke : « ’bundle:install’ » et « # queue "bundle exec middleman build ». Pour résumer, j’ai un repo de dev contenant mon projet Middleman complet puis un autre contenant le build, (insérer en submodule). Pour éviter de compiler directement sur le serveur, je push directement le dossier build en utilisant le rakefile suivant :

####Etape 1 : Mise a jour du dossier build
desc "build static pages"
task :build do
p "## Building static pages"
system "middleman build --no-clean"
end
####Etape 2 : Commit et push le repo build
desc "Commit build"
task :commit do
p "## Commit build"
cd "build" do
system "git add -A"
message = "Site updated at #{Time.now.utc}"
p "## Commiting: #{message}"
system "git commit -m \"#{message}\""
p "## Pushing generated website"
system "git push origin master"
p "## Commit build complete"
end
end

####Etape 3 : Deployer seulement le build
desc "deploy Projet"
task :deploy do
p "## Deploying to web"
system "mina deploy"
end

####Bonus : La dance des task
desc "build and deploy"
task :publish do
Rake::Task["build"].invoke
Rake::Task["commit"].invoke
Rake::Task["deploy"].invoke
end
Note : le —no-clean empêche la suppression du .git, le pb c’est qu’il ne clean rien. Je cherche encore une fonction de ce genre : —no-clean’.git'

Au final, un petit …

$ Rake publish

et c’est en ligne.

Tony.

comments powered by Disqus