Capistrano:从两个不同的存储库中检出文件

Capistrano: Checkout files from two different repository

我在 BitBucket 中有两个存储库。

一个是我想首先部署的普通存储库,Laravel 安装,我想部署分支中的所有文件。

我的问题是,有另一个包含单个文件的存储库,它想要检出到服务器中的一个目录。该文件是 class,我不在本地使用,但对服务器来说是必不可少的。

我不知道如何处理这个问题。

这是我的 deploy.rb 文件:

#config valid only for current version of Capistrano
lock '3.6.1'
#require custom config
require './config/myconfig.rb'

set :stages, ["staging", "production"]
set :default_stage, "staging"

set :application, '<Application Name>'
set :repo_url, '<Url to my First main repo>'
set :scm, :git
set :branch, 'master'

set :user, 'vagrant'

这是我的 staging.rb 文件:

set :deploy_to, '<Directory to deploy to>'

server '<Server name or IP>', user: 'vagrant', roles: %w{app db web}

namespace :deploy do

    desc 'Get stuff ready prior to symlinking'
    task :compile_assets do
    on roles(:app), in: :sequence, wait: 1 do
       execute "cp #{deploy_to}/../components/.env #{release_path}"
       execute "cp -r #{deploy_to}/../components/vendor #{release_path}"
       execute "cp -r #{deploy_to}/../components/node_modules #{release_path}"
       execute "cd #{release_path}; gulp;"
    end
  end
  after :updated, :compile_assets
end

如何引入单个文件(Repo 2 中的 app/Extentions/TaskOneExtention.php)并将其放入目录(例如 Repo 1 中的 app/Extentions)?

我希望在部署任务后 运行 执行任务,但 运行 使用相同的部署命令。

非常感谢您的帮助。

我在这种情况下所做的是使用两个 Capistrano 部署和一些符号链接。

为了这个答案,我们将 $REPO1HOME 定义为部署 Repo1 的位置。

首先,我将 Repo2 中的文件名添加为 Repo1 中的 shared_file (config/deploy.rb):

set :shared_files, 'app/Extensions/TaskOneExtension.php'

此时,当您部署 Repo1 时,将创建一个从 $REPO1HOME/releases/[timestamp]/app/Extensions/TaskOneExtension.php$REPO1HOME/shared/app/Extensions/TaskOneExtension.php 的符号链接。当然后一个文件还不存在,部署会失败。

要使此文件存在,请将 Repo2 部署到服务器。假设它现在在 $REPO1HOME/repo2/ 中,而有问题的文件现在在 $REPO1HOME/repo2/releases/[timestamp]/app/Extensions/TaskOneExtension.php 中。在 $REPO1HOME/shared/app/Extensions/TaskOneExtension.php 中创建指向 $REPO1HOME/repo2/current/app/Extensions/TaskOneExtension.php 的符号链接。确保这是绝对符号链接而不是相对符号链接。

ln -s $REPO1HOME/repo2/current/app/Extensions/TaskOneExtension.php $REPO1HOME/shared/app/Extensions/TaskOneExtension.php

此时,您应该有两个可以独立部署的存储库,然后在服务器上链接起来。