capistrano deploy without destination production box access to the git 框

capistrano deploy without destination production box access to the git box

所以我有一种情况,我们将我们的存储(git 存储库)环境迁移到另一个 box.Let,称之为 stash_box。

现在,以前这是我部署到产品的过程。

我有一个安全的 linux 盒子,用于部署。让我们称之为 deploy_box.

让我们调用目标 prod 服务器 prod_box。

现在之前生产箱可以通过 ssh 访问储藏箱(prod_box -> stash_box)

所以当我从 deploy_box & 运行

中提取代码时
cap prod_box deploy

它曾经部署成功。

现在,有一个防火墙规则 不允许 t 允许 prod_box 与具有 git 的 stash_box 对话回购

据我所知,capistrano 需要在目标服务器和存储服务器之间建立连接。

现在,deploy_box 可以通过两种方式到达 stash_box 和 prod_box。

有没有办法通过修改现有的capistrano脚本来实现生产部署?

这是我现有的 deploy.rb 文件:

require "capistrano/ext/multistage"
require "bundler/capistrano"


SECURE_FILES = ['database.yml', 'initializers/secret_token.rb']

set :application,   "myapp"
set :use_sudo,      false

set :scm,           :git
set :repository, "ssh://git@stash_box:7999/web/myapp.git"
set :user, "webuser"
set :deploy_via, :remote_cache

after "deploy:update_code", "custom:create_symlinks", "custom:assets_precompile", "custom:miscellaneous"
after "deploy", "deploy:migrate"
after "deploy", "deploy:cleanup"

namespace :deploy do
  desc "Restarting mod_rails with restart.txt"
  task :restart, :roles => :app, :except => { :no_release => true } do
    run "touch #{current_path}/tmp/restart.txt"
  end

  [:start, :stop].each do |t|
    desc "#{t} task is a no-op with mod_rails"
    task t, :roles => :app do ; end
  end

end

namespace :custom do

  desc "Assets Pre-Compilation"
  task :assets_precompile, :roles => :app do
    run "cd #{current_release} && RAILS_ENV=#{rails_env} bundle exec rake assets:precompile"
  end
end

这是我的 prod_box.rb 文件:

server "prod_box", :app, :web, :db, :primary => true

set :deploy_to, "/opt/web/var/my_app"
set :rails_env, "customertest"
set :branch, "staging"

只需使用不同的部署策略:

set :deploy_via, :copy

现在源代码会在本地检出并上传到远程。您可以阅读更多相关信息 here

编辑

对于 capistrano v3,您必须使用此 gem,并指定:

set :scm, :gitcopy