【问题标题】:Deploying a git submodule with Capistrano 3使用 Capistrano 3 部署 git 子模块
【发布时间】:2014-04-02 17:55:13
【问题描述】:

我的项目 repo 包含 Wordpress 作为 git 子模块。通过 Capistrano 3 部署时,子模块目录是空的。

project
--wordpress
--images

我正在使用 git 和 :deploy_via, :remote_cache

如何告诉 Capistrano 也部署子模块?

【问题讨论】:

    标签: git deployment capistrano git-submodules capistrano3


    【解决方案1】:

    可能与capistrano v3 deploy git repository and its submodules 重复。

    在 capistrano 3.1.x 及更高版本中,您可以实施自己的 SCM 策略。有一个可用的 gem 可以帮助 git 子模块,请参阅:https://github.com/i-ekho/capistrano-git-submodule-strategy

    注意:如果您已经尝试使用默认的 git 策略,您可能会遇到 repo 文件夹的问题。只需转到部署目录并将其删除,然后再次运行 cap deploy 即可修复它。

    【讨论】:

      【解决方案2】:

      我从老生常谈中找到了一个很棒的脚本,它覆盖了 Capistrano 中的 git 任务。

      将此脚本放在lib/capistrano/tasks/git.cap 中并照常使用cap stage deploy

      https://gist.github.com/corny/7459729

      # Save this file as lib/capistrano/tasks/git.cap
      
      namespace :git do
        desc 'Copy repo to releases'
        task create_release: :'git:update' do
          on roles(:all) do
            with fetch(:git_environmental_variables) do
              within repo_path do
                execute :git, :clone, '-b', fetch(:branch), '--recursive', '.', release_path
              end
            end
          end
        end
      end
      

      【讨论】:

      • 我试过了,但在创建发布符号链接时出现错误。
      • 在第一次尝试之前,请确保您服务器上的 repo 目录已清空。
      • 我不确定你的意思。当我通过 SSH 连接到我的服务器并检查 doc root 时,Capistrano 没有创建 git repo。
      • 我不确定这是否与我们所说的相同,但在 capistrano v3 上,有一个任务是在部署后删除 .git 目录以节省磁盘空间。我相信你可以覆盖和禁用它。
      • 脚本的最佳位置是将其添加到deploy.rb
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      相关资源
      最近更新 更多