Развертывание одной и той же кодовой базы с небольшими отклонениями на нескольких серверах с помощью capistrano и git - PullRequest
4 голосов
/ 20 июля 2011

У нас есть кодовая база, которую мы продаем нескольким клиентам.Мы используем git для контроля версий и Capistrano для автоматизированных развертываний.

Есть небольшие различия между развертываниями, такими как макеты дизайна, файлы css, логотипы и файлы конфигурации, такие как фронт-контроллер CAKEPHP, в котором находятся пути к каталогам app и cakephp.

В настоящее время у нас есть основные главные / промежуточные ветви для проекта.Мы разрабатываем тематические ветки, как только тематическая ветвь готова для объединения в кодовую базу, мы объединяем тематическую ветвь в промежуточную и разворачиваем на наш основной промежуточный сервер.

Как только код был протестирован на стадии подготовки и мы готовы к выпуску, мы объединяем стадию в мастер.Затем мы должны развернуть на разных клиентских серверах.У нас есть подготовительный и производственный сервер для каждого клиента.

В настоящее время у нас есть промежуточная и производственная ветка для каждого клиента, и мы развертываем на каждом сервере из каждой отдельной ветки.Это становится болезненным, так как мы должны объединить нашу основную ветку проекта с промежуточными / производственными ветвями для каждого клиента и запустить cap deploy для каждого сервера.

Как мы можем просто развернуть на клиентских серверах из одной ветви, но включить различные файлы, необходимые для того, чтобы каждый клиентский сервер работал и выглядел правильно?

1 Ответ

1 голос
/ 22 июля 2011

Я использовал 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...