【问题标题】:Deploying the same codebase w/ slight variances to multiple servers with capistrano and git使用 capistrano 和 git 将具有细微差异的相同代码库部署到多个服务器
【发布时间】:2011-10-09 11:28:01
【问题描述】:

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

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

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

一旦代码在 staging 上经过测试并且我们准备好发布,我们会将 staging 合并到 master 中。然后我们必须部署到不同的客户端服务器。我们为每个客户提供一个登台和生产服务器。

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

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

【问题讨论】:

    标签: git cakephp deployment capistrano


    【解决方案1】:

    我使用 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 中是我的主要部署脚本。

    在配置/部署中,每个环境都有一个脚本。即 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 2012-03-26
      • 2012-07-20
      • 2023-04-09
      • 2010-12-12
      • 2014-08-27
      • 2019-06-15
      相关资源
      最近更新 更多