我在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命令运行。
我真的很感激一些帮助。
答案 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
此时,您应该有两个可以独立部署的存储库,然后在服务器上进行链接。