gpt4 book ai didi

git - 使用 capistrano 和 git 将相同的代码库(略有差异)部署到多个服务器

转载 作者:太空狗 更新时间:2023-10-29 13:46:17 26 4
gpt4 key购买 nike

我们有一个代码库,可以卖给多个客户。我们使用 git 进行版本控制,使用 Capistrano 进行自动化部署。

部署之间存在细微差异,例如设计布局、css 文件、 Logo 和配置文件(如 CAKEPHP 的前端 Controller ,其中包含应用程序和 cakephp 目录的路径)。

我们目前有该项目的主要 master/staging 分支。我们在主题分支中进行开发,一旦主题分支准备好 merge 到代码库中,我们就将主题分支 merge 到登台并部署到我们的主登台服务器。

一旦代码在暂存中经过测试并且我们准备好发布,我们就将暂存 merge 到主版本中。然后我们必须部署到不同的客户端服务器。我们为每个客户都有一个登台和生产服务器。

目前我们为每个客户端都有一个暂存和生产分支,我们从每个单独的分支部署到每个服务器。这变得很痛苦,因为我们必须将我们的主项目分支 merge 到每个客户端的暂存/生产分支中,并为每个服务器运行 cap deploy

我们如何才能只从一个分支部署到客户端服务器,但包含每个客户端服务器正常工作和看起来正常所需的不同文件?

最佳答案

我用 capistrano/ext/multistage 做了类似的事情。

交付到生产时,我可以使用cap prod deploy,交付到测试时,我可以使用cap test deploy

我的 Capfile 看起来像

require 'rubygems'
require 'railsless-deploy'
require 'capistrano/ext/multistage'

set :stages, %w(staging)

load 'config/deploy'

在 config/deploy.rb 中是我的主要部署脚本。

在 config/deploy 中,我为每个环境都有一个脚本。即 prod.rb 和 test.rb。

这些特定于环境的脚本包含特定于这些环境的变量。通常,我会指定分支、用户、应用程序、deploy_to、copy_remote_dir、copy_exclude 以及我需要在主 config/deploy.rb 中使用的任何其他变量,这些变量可能因环境而异。

有些变量可能不会出现在所有特定于环境的脚本中,因此 deploy.rb 在使用它们之前会检查它们是否存在。即

# Link upload area
if exists?(:uploads)
run "rm -rf #{current_release}#{uploads}"
run "ln -s #{shared_path}#{uploads} #{current_release}#{uploads}"
end

有时,我会使用暂存名称复制特定于环境的配置

# Copy config
run "cp #{current_release}/config/#{stage}/app/config.php #{current_release}/src/app"

我应该提到我使用 git 和我的 deploy_via 复制策略。结果,所有的配置都被上传到服务器的独立目录中,然后被复制到适当的位置。您的里程可能会有所不同。

在此处了解有关 capirstrano 多级扩展的更多信息:http://weblog.jamisbuck.org/2007/7/23/capistrano-multistage

关于git - 使用 capistrano 和 git 将相同的代码库(略有差异)部署到多个服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6763779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com