capistrano v2 では、オプションを使用してデプロイにサブモジュールを含めることができます。
set :git_enable_submodules, 1
v3 では、これは機能していないようです。このオプションはまだサポートされていますか、それとも同じ目標を達成するための新しい方法はありますか?
capistrano v2 では、オプションを使用してデプロイにサブモジュールを含めることができます。
set :git_enable_submodules, 1
v3 では、これは機能していないようです。このオプションはまだサポートされていますか、それとも同じ目標を達成するための新しい方法はありますか?
capistrano 3.1.x 以降では、独自の SCM 戦略を実装できます。git サブモジュールに役立つ利用可能な gem があります。https ://github.com/i-ekho/capistrano-git-submodule-strategy を参照してください。
注:repo
既定の git 戦略を既に試している場合は、フォルダーに問題がある可能性があります。サーバーの deploy ディレクトリに移動して削除し、 cap deploy を再度実行して修正します。
新しいプルリクエスト「828」は、それを再び実装しようとしています: https://github.com/capistrano/capistrano/pull/828
@coffeeaddict で説明されているように、このコミットは、capistrano 自体にバンドルされるまで、ローカルにデプロイする必要があるコードのスクラップです。コードを使用するには Capistrano >= 3.1.0 が必要であることに注意してください。
上記の戦略のいくつかの問題を修正することを提案する別のGistもあります。
capistrano の git タスクにフックするのは非常に難しいことがわかりました (ステージが設定されるまで存在しないため)。さらに、git アーカイブはサブモジュールのサポートをまったく提供しないため、その部分を完全に置き換える必要があります。
明らかな理由から、コピーと貼り付けもオプションではありません。
そこで、git scm を置き換えることができるこの単純な gem を作成しました。サブモジュールでレポを複製することにより、capistrano 2 と同様のアプローチを使用します。それは非常にシンプルで、私たちの目標には十分です。サブモジュールのさまざまな使用法はそれほど多くないと思います (人々が複雑さを避けようとする場合)。
https://github.com/juanibiapina/capistrano-scm-gitsubmodules
それもあなたに役立つかどうか教えてください。
アップデート:
このモジュールは capistrano 3.1.0 で廃止されました。代わりにこれを試してください: https://gist.github.com/stevenscg/8176735
カピストラーノのソース コードhttps://github.com/capistrano/capistrano/blob/master/lib/capistrano/tasks/git.rake#L34およびhttps://github.com/capistrano/capistrano/blobでわかるように/master/lib/capistrano/tasks/git.rake#L56を使用git archive
して、コードをリリース ディレクトリにチェックアウトします。
コードはここに再現されています:
desc 'Clone the repo to the cache'
task clone: :'git:wrapper' do
on roles :all do
if test " [ -f #{repo_path}/HEAD ] "
info t(:mirror_exists, at: repo_path)
else
within deploy_path do
with git_environmental_variables do
execute :git, :clone, '--mirror', repo_url, repo_path
end
end
end
end
end
desc 'Update the repo mirror to reflect the origin state'
task update: :'git:clone' do
on roles :all do
within repo_path do
execute :git, :remote, :update
end
end
end
desc 'Copy repo to releases'
task create_release: :'git:update' do
on roles :all do
with git_environmental_variables do
within repo_path do
execute :mkdir, '-p', release_path
execute :git, :archive, fetch(:branch), '| tar -x -C', release_path
end
end
end
そのことから、サブモジュールがサポートされていないことを確認できます。サブモジュールを複製または初期化するコマンドは発行されず、git-archive はそれらを無視します。
サブモジュールを組み込むために必要なフックが既に存在する場合は、「すぐに使える」サブモジュールを含めないという決定が下されました (ソース: Capistrano の作成者はこちら)。自分に合った方法でサブモジュールをチェックアウト/更新するために必要なもの。Capistrano v2 サブモジュールのサポートは、多くの場合、人々に予期しない結果をもたらしました。
それを念頭に置いて。にフックしてupdate
、更新が完了した後にサブモジュールを初期化および更新し、git-archive
必要なことを行う拡張方法を調べることは価値があるかもしれません。