Capistrano v3 развернуть репозиторий Git и его подмодули
Подмодули Capistrano v2 могут быть включены в развертывание с помощью опции:
set :git_enable_submodules, 1
В v3 это не похоже на работу. Эта опция все еще поддерживается или есть новый способ достижения той же цели?
4 ответа
Как вы можете видеть в исходном коде Capistrano 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
делай что хочешь.
В capistrano 3.1.x и более поздних версиях вы можете реализовать свою собственную стратегию SCM. Существует доступный гем, который помогает с подмодулем git, пожалуйста, смотрите: https://github.com/i-ekho/capistrano-git-submodule-strategy.
ПРИМЕЧАНИЕ: у вас могут быть проблемы с repo
папку, если вы уже пробовали с помощью стратегии Git по умолчанию. Просто перейдите в каталог развертывания на сервере и удалите его, а затем снова запустите cap deploy для исправления.
Новый запрос Pull "828" пытается реализовать это снова: https://github.com/capistrano/capistrano/pull/828
Как обсуждал @coffeeaddict, этот Commit - это кусок кода, который вам нужно будет развернуть локально, пока он не будет связан с самим capistrano. Обратите внимание, что вам нужно Capistrano >= 3.1.0, чтобы использовать код.
Существует также еще один Gist, предлагающий исправить некоторые проблемы стратегии, описанной выше.
Оказывается, очень трудно подключиться к какой-либо из задач git capistrano (потому что они не существуют, пока не установлена сцена). Кроме того, git-архив никоим образом не обеспечивает поддержку подмодулей, поэтому эта часть должна быть полностью заменена.
Копирование и вставка также не вариант по очевидным причинам.
Поэтому я написал этот простой гем, который может заменить git scm. Он использует похожий подход к capistrano 2, клонируя репо с его подмодулями. Это очень просто и достаточно для наших целей. Я подозреваю, что там не так много разных подмодулей (если люди пытаются избежать осложнений).
https://github.com/juanibiapina/capistrano-scm-gitsubmodules
Дайте мне знать, если это вам тоже поможет.
ОБНОВИТЬ:
Этот модуль устарел с Capistrano 3.1.0. Попробуйте вместо этого: https://gist.github.com/stevenscg/8176735