Comment configurer Capistrano pour le déployer à partir du référentiel Git local?

Quelles modifications dois-je apporter au fichier deploy.rb ci-dessous pour lui permettre de déployer mon application à partir d’un repository git local? Si je ne peux pas déployer à partir d’un repository local, puis-je demander à Capistrano d’utiliser la copie de travail à la place?

 set :application, "my_app" set :repository, "." set :local_repository, "file:///path/to/application/.git" set :deploy_to, "/data/www/apps/#{application}" set :deploy_via, :copy set :copy_cache, true set :user, "dane" set :use_sudo, false set :scm, :git # Should I change this to :none set :branch, "master" 

C’est facile:

 set :scm, :none set :repository, "." set :deploy_via, :copy 

Exécutez simplement Capistrano à partir de la racine de votre projet.

 set :repository, 'file:///path/to/your/git_repository' set :local_repository, "file://." set :scm, :git # set :deploy_via, :copy # you must comment it 

Le deploy_via, :copy a été supprimée dans la version 3.

https://github.com/capistrano/capistrano/issues/695

Dans la plupart des cas, vous devriez avoir votre code dans un référentiel en ligne tel que github ou bitbucket, puis vous devez simplement définir cette ligne dans votre fichier deploy.rb:

 set :repo_url, '[email protected]:my_account/my_project.git' 

Bien que si vous avez un référentiel sur le serveur distant que vous déployez également, vous devez modifier cette ligne dans votre fichier deploy.rb de la manière suivante:

 set :repo_url, 'file:///home/deploy/bare_repo/my_project.git' 

Gardez à l’esprit que les trois barres obliques sont importantes car le file:// indique à capistrano que vous recherchez un fichier, et que la barre oblique précédente est nécessaire pour pointer vers un chemin racine qui ressemblerait à /home/deploy/bare_repo/my_project.git .

J’ai utilisé une combinaison de réponses @Ariejan et @HungYuHei qui ont fonctionné pour moi.

 set :deploy_via, :copy set :use_sudo, false set :scm, "git" set :repository, "." set :local_repository, "." set :branch, "master" 

Si vous utilisez une copie locale (et ne possédez pas le projet sur Github), il est également judicieux de désactiver la tâche :check_revision dans votre deploy.rb, qui vérifie si remote est synchronisé avec git local.

Capistrano 3 solution qui fonctionne pour moi:

  before :deploy, :deploy_from_local_repo task :deploy_from_local_repo do set :repo_url, "file:///tmp/.git" run_locally do execute "tar -zcvf /tmp/repo.tgz .git" end on roles(:all) do upload! '/tmp/repo.tgz', '/tmp/repo.tgz' execute 'tar -zxvf /tmp/repo.tgz -C /tmp' end end 

Avant de déployer, vous téléchargez un fichier tar.gz sur le serveur, décompressez et enfin réinitialisez le fichier: repo_url en mode fichier.

Prenez soin de supprimer le repo perméable:

 task :remove_repo do on roles(:all) do execute "rm -r #{repo_path}" end end 

déployer normalement par copie est super lent. mais copy_cache n’est disponible que si scm N’EST PAS aucun (sync utilise scm), cela signifie que le déploiement à partir de la copie de travail ne peut être effectué qu’avec une copie lente. J’ai réussi à trouver une installation rapide pour le déploiement de copies à partir d’un repository local qui est rapide. Vous devez néanmoins valider localement les modifications, mais vous n’avez pas besoin de les pousser.

 set :scm, "git" set :local_repository, "file://." set :deploy_via, :copy # cache only seems to work if use scm set :copy_cache, true set :copy_via, :scp set :copy_exclude, [".zeus*", ".bundle", ".git", "tmp/*", "doc", "log/*", "fixtures/*"] 

Malheureusement, il casse parfois mystérieusement avec:

 fatal: Could not parse object 'c438b9d1242cb311be43d681e3f89bc486d748ed'.` 

Dans l’idéal, la synchronisation du cache local doit être implémentée même si aucun scm n’est utilisé pour le déploiement depuis la copie de travail vers le travail. excellente fonctionnalité à append à capistrano