- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们有一个代码库,可以卖给多个客户。我们使用 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/
直接问题:对于一个类对象的三个(或更多)几乎相同的拷贝,我怎样才能最好(或最有效)地存储它们之间的差异? 背景:我有一个需要一组参数的算法: struct params { std::strin
我是一名优秀的程序员,十分优秀!