web-dev-qa-db-ja.com

ローカルGitリポジトリからデプロイするようにCapistranoを構成する方法は?

ローカルgitリポジトリからアプリをデプロイするには、以下のdeploy.rbファイルにどのような変更を加える必要がありますか?ローカルリポジトリから展開できない場合、capistranoに代わりに作業コピーを使用させることはできますか?

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"
51
DaneS

それは簡単です:

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

プロジェクトのルートからCapistranoを実行するだけです。

56
Ariejan

deploy_via, :copyはバージョン3で削除されました。

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

ほとんどの場合、githubやbitbucketなどのオンラインリポジトリにコードを配置し、deploy.rbファイルに次の行を設定するだけです。

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

ただし、デプロイしているリモートサーバーにもリポジトリがある場合は、deploy.rbファイルの行を次のように変更します。

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

file://はcapistranoにファイルを探していることを伝えるので、3つのスラッシュは重要であり、/home/deploy/bare_repo/my_project.gitのようなルートパスを指すには前のスラッシュが必要であることに注意してください。

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

私は@Ariejanと@HungYuHeiの回答を組み合わせて使用​​しました。

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

ローカルコピーを使用する場合(Githubにプロジェクトがない場合)、deploy.rbで:check_revisionタスクを無効にして、リモートがローカルgitと同期しているかどうかを確認することも賢明です。

5
rohitmishra

私のために実行されているカピストラーノ3ソリューション:

  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

デプロイする前に、tar.gzファイルをサーバーにアップロードし、解凍して、最後に:repo_urlをファイルモードにリセットします。

以前のレポを削除するように注意してください:

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

通常、コピーによる展開は非常に遅いです。ただし、scmがnone(syncはscmを使用)でない場合にのみcopy_cacheを使用できます。これは、作業コピーからの展開は緩慢なコピーでのみ実行できることを意味します。ローカルリポジトリからコピーデプロイの高速セットアップを見つけることができました。ただし、ローカルで変更をコミットする必要はありますが、プッシュする必要はありません。

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/*"]

残念なことに、それは時々不思議に壊れます:

fatal: Could not parse object 'c438b9d1242cb311be43d681e3f89bc486d748ed'.`

作業コピーから作業への展開にscmが使用されていない場合でも、理想的にはローカルキャッシュの同期を実装する必要があります。カピストラーノに追加する素晴らしい機能

0
Viktor Trón