Capistrano:从两个不同的存储库

时间:2016-09-09 10:29:44

标签: capistrano capistrano3

我在BitBucket中有两个存储库。

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

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

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

这是我的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)?

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

我真的很感激一些帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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