更改存储库URL后,Capistrano部署失败


75

我从Git仓库通过capistrano进行了简单部署。最初,我是从GitHub部署的,一切正常。但是后来我将存储库移至BitBucket,现在我得到了

fatal: Could not parse object '9cfb...'.

我换衣服后问题就消失了

set :deploy_via, :remote_cache

set :deploy_via, :copy

但这不能解决问题,只能绕过它。有什么办法可以告诉Capistrano删除旧的缓存?

Answers:


45

我得说不确定,因为我无法测试,但这应该可行:

cap deploy:cleanup -s keep_releases=0

由于它会擦除服务器上的每个版本(缓存)。

显然,您还需要删除shared/cached-copy,因为根据下面的评论,上面的Capistrano调用似乎无法清除它。


65
这并不能完全解决问题,但是一旦我删除shared/cached-copy,它现在就可以很好地部署了。
雅库布·阿诺德

它对我也不起作用,但是雅库布在这里的评论确实起作用。
京东。

5
您只需将源URL远程更改为shared/cached-copy目录中新的回购地址即可。
2012年

2
答案仅删除服务器上的所有发行版(包括当前发行版)。最好的答案(如果您有远程缓存处于活动状态)是Jakub Arnold的答案。
eveevans 2013年

7
从Capistrano 3开始,您必须删除/repo而不是shared/cached-copy。编辑:请参阅贾斯汀·坦纳(Justin Tanner)的答案
csch 2015年

106

Capistrano 2.X

使用新地址删除并重新克隆存储库:

cd $deploy_to/shared
rm -rf cached-copy
git clone ssh://git@example.org/new/repo.git cached-copy

修改您config/deploy.rb以使用新的仓库:

set :repository, "ssh://git@example.org/new/repo.git"
set :scm, :git
set :deploy_via, :remote_cache

再次部署:

cap deploy

Capistrano 3.X

  1. 删除$deploy_to/repo目录
  2. 修改您的config/deploy.rb(与2.X相同)
  3. cap deploy

5
我会说这是更好的答案。如果删除所有发行版,则在新部署失败并且无法回滚的情况下,您的状况基本上会很糟糕。我还认为,值得注意的是,仅需要手动克隆存储库即可将主机添加到已知主机。如果已经添加了部署,则部署将起作用(与第一次设置capistrano基本上相同,在任何地方签出
仓库

@KennyLövrin是的,将存储库克隆到任何地方都会使您的主机进入已知主机,但是如果您已:remove_cache设置,则需要在缓存副本目录中放置某些内容,否则capistrano将不会部署。
贾斯汀·坦纳

7
请记住,capistrano 3.1使用shared/repo而不是,shared/cached-copy因此该答案虽然几乎是正确的,但应该进行更新。
Fred Oliveira 2014年

4
在capistrano 3.2.1中,我解决了删除$deploy_to/repo文件夹的问题,因为repo在中找不到任何文件夹shared
Roxas Shadow 2014年

1
这是更好的答案
Brettski 2015年


6

我用以下方法解决了这个问题deploy.rb

namespace :deploy do
  task :cope_with_git_repo_relocation do
    run "if [ -d #{shared_path}/cached-copy ]; then cd #{shared_path}/cached-copy && git remote set-url origin #{repository}; else true; fi"
  end
end
before "deploy:update_code", "deploy:cope_with_git_repo_relocation"

这会使部署速度稍慢一些,因此一旦您满意所有部署目标都已完成,就值得删除。


3

您需要在/ shared / cached-copy文件夹中更改git origin

cd /var/www/your-project/production/shared/cached-copy
git remote remove origin
git remote add origin git@bitbucket.org:/origin.git

尝试进行上限生产部署


0

最简单的方法是将repo url更改为Web服务器上shared / cached-copy目录中.git / config中的新URL。然后,您可以照常进行常规部署。



0

如果您需要执行大量回购,则可能需要为其添加任务。

对于capistrano 3,您可以在deploy.rb中添加此任务

desc "remove remote git cache repository"
  task :remove_git_cache_repo do
      on roles(:all) do
    execute "cd #{fetch(:deploy_to)} && rm -Rf repo"
  end
end

然后在每个阶段运行一次:

cap testing remove_git_cache_repo

0

这是此答案所讨论的Capistrano 3版本。在每个服务器上执行答案可能会很乏味。

因此,将其放入deploy.rb然后运行cap <environment> deploy:fix_repo_origin

namespace :deploy do
  desc 'Fix repo origin, for use when changing git repo URLs'
  task :fix_repo_origin do
    on roles(:web) do
      within repo_path do
        execute(:git, "remote set-url origin #{repo_url}")
      end
    end
  end
end

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.