如何将我的代码库恢复到我最近的部署?
How to revert my codebase back to my most recent deploy?
我有以下场景。
12 月 6 日,我和我的团队将我们的代码库部署到生产环境中。从那时起,我们进行了多项更改,这些更改以我们未曾预见的方式破坏了代码库。该代码库是一个旧的遗留代码库,几乎没有任何测试、覆盖率、很多代码味道和非常紧密耦合的模型。尽管我们尽了最大努力进行零碎的重构和测试,但该应用程序还是崩溃了,现在我们很难确定如何修复该应用程序。我们的开发实践不提倡持续部署,并且每个月都会部署大量代码(我们正在努力)。我们没有压力,但我们很难找到像以前那样工作的提交。
我的问题是是否有办法获取当前正在生产的代码库并将其作为我们的起点。例如,我们使用 capistrano 将代码库部署到 git 的 EC2 上。 git、AWS EC2 或 Capistrano 是否可以让我们简单地从那里获取代码并简单地使用它来重置我们的 git 代码?
这听起来并不容易,但我认为也许有人知道如何做到这一点。有没有人知道 a) 的方法。获取生产代码 b)。使用该代码副本作为对 return 我们当时开发代码的参考。
感谢您的帮助。
您至少有两个选择。第一个是使用 capistrano。按照步骤 here,您可以设置以下 capistrano 脚本:
namespace :deploy do
desc 'Show deployed revision'
task :revision do
on roles :app do |host|
within current_path do
info "#{host}: #{capture :cat, 'REVISION'}"
end
end
end
end
这将允许您调用 capistrano production deploy:revision
。这将输出如下内容:
$ cap production deploy:revision
00:00 deploy:revision
app01.example.com: cf8734ece3938fc67262ad5e0d4336f820689307
app02.example.com: cf8734ece3938fc67262ad5e0d4336f820689307
app03.example.com: cf8734ece3938fc67262ad5e0d4336f820689307
这是您的提交哈希,cf8734ece3938fc67262ad5e0d4336f820689307
。然后你可以 git checkout d231b7abd6e4183e037817780738c54f1fbaf1fa
这将带你到你想要的确切提交。现在用
创建一个新分支
git checkout -b 'last_deployed_code'
git push origin last_deployed_code`
或正如@RomainValeri 评论的那样:
git branch recovery origin/cf8734ece3938fc67262ad5e0d4336f820689307
您现在在 github 上有了一个新分支,其中包含您想要的确切代码。
你的第二个选择有点丑陋,但同样有效。假设您对 scp 满意(如果不满意,请多读 here - 这真的很简单),SSH 进入您的服务器,导航到您的 'app' 目录,然后将整个目录复制到您的本地机.
然后您可以创建一个新分支或简单地强制推送到 master,嘿,转眼间,您在 github 上有一个分支,它完全反映了您部署的代码。第一个选项绝对是首选,因为可能有一些您实际上不想从产品应用程序目录复制的配置文件
我有以下场景。
12 月 6 日,我和我的团队将我们的代码库部署到生产环境中。从那时起,我们进行了多项更改,这些更改以我们未曾预见的方式破坏了代码库。该代码库是一个旧的遗留代码库,几乎没有任何测试、覆盖率、很多代码味道和非常紧密耦合的模型。尽管我们尽了最大努力进行零碎的重构和测试,但该应用程序还是崩溃了,现在我们很难确定如何修复该应用程序。我们的开发实践不提倡持续部署,并且每个月都会部署大量代码(我们正在努力)。我们没有压力,但我们很难找到像以前那样工作的提交。
我的问题是是否有办法获取当前正在生产的代码库并将其作为我们的起点。例如,我们使用 capistrano 将代码库部署到 git 的 EC2 上。 git、AWS EC2 或 Capistrano 是否可以让我们简单地从那里获取代码并简单地使用它来重置我们的 git 代码?
这听起来并不容易,但我认为也许有人知道如何做到这一点。有没有人知道 a) 的方法。获取生产代码 b)。使用该代码副本作为对 return 我们当时开发代码的参考。
感谢您的帮助。
您至少有两个选择。第一个是使用 capistrano。按照步骤 here,您可以设置以下 capistrano 脚本:
namespace :deploy do
desc 'Show deployed revision'
task :revision do
on roles :app do |host|
within current_path do
info "#{host}: #{capture :cat, 'REVISION'}"
end
end
end
end
这将允许您调用 capistrano production deploy:revision
。这将输出如下内容:
$ cap production deploy:revision
00:00 deploy:revision
app01.example.com: cf8734ece3938fc67262ad5e0d4336f820689307
app02.example.com: cf8734ece3938fc67262ad5e0d4336f820689307
app03.example.com: cf8734ece3938fc67262ad5e0d4336f820689307
这是您的提交哈希,cf8734ece3938fc67262ad5e0d4336f820689307
。然后你可以 git checkout d231b7abd6e4183e037817780738c54f1fbaf1fa
这将带你到你想要的确切提交。现在用
git checkout -b 'last_deployed_code'
git push origin last_deployed_code`
或正如@RomainValeri 评论的那样:
git branch recovery origin/cf8734ece3938fc67262ad5e0d4336f820689307
您现在在 github 上有了一个新分支,其中包含您想要的确切代码。
你的第二个选择有点丑陋,但同样有效。假设您对 scp 满意(如果不满意,请多读 here - 这真的很简单),SSH 进入您的服务器,导航到您的 'app' 目录,然后将整个目录复制到您的本地机.
然后您可以创建一个新分支或简单地强制推送到 master,嘿,转眼间,您在 github 上有一个分支,它完全反映了您部署的代码。第一个选项绝对是首选,因为可能有一些您实际上不想从产品应用程序目录复制的配置文件