2017-05-24 13 views
0

저는 Capistrano를 처음 사용 합니다만, 사용자 정의 배포를 위해 작동하도록 노력했습니다. AWS와 하나 이상의 정적 서버에 자동 확장 그룹이있는 클러스터에 무들을 배포해야합니다.Capistrano 3 : 다른 배포 흐름을 처리하는 방법

위대한 작품입니다!

namespace :moodle do 

    desc 'Save config.php from current release directory' task :'save-config' 
    on roles(:web) do 
     execute :sudo, :cp, shared_path.join('config.php'), release_path 
     execute :sudo, :chown, 'www-data-aulatp:www-data', release_path.join('config.php') 
    end 
    end 

    desc 'Copy config.php to release directory' task :'restore-config' do 
    on roles(:web) do 
     execute :sudo, :cp, shared_path.join('config.php'), release_path 
     execute :sudo, :chown, 'www-data-aulatp:www-data', release_path.join('config.php') 
    end 
    end 

    desc 'Enable maintenance mode on Moodle site' task :'enable-maintenance' do 
    on roles(:admin) do 
     execute :sudo, '-u', 'www-data-aulatp', '/usr/bin/php7.0', current_path.join('admin', 'cli', 'maintenance.php'), '--enable' 
    end 
    end 

    desc 'Disable maintenance mode on Moodle site' task :'disable-maintenance' do 
    on roles(:admin) do 
     execute :sudo, '-u', 'www-data-aulatp', '/usr/bin/php7.0', current_path.join('admin', 'cli', 'maintenance.php'), '--disable' 
    end 
    end 

    desc 'Purge all internal Moodle caches' task :'purge-caches' do 
    on roles(:admin) do 
     execute :sudo, '-u', 'www-data-aulatp', '/usr/bin/php7.0', current_path.join('admin', 'cli', 'purge_caches.php') 
    end 
    end 
end 

before 'deploy:starting', 'moodle:save-config' 
before 'deploy:updated',  'moodle:enable-maintenance' 
after 'deploy:updated',  'moodle:restore-config' 
after 'deploy:finished', 'moodle:enable-maintenance' 
after 'deploy:finished', 'moodle:disable-maintenance' 
after 'deploy:finished', 'moodle:purge-caches' 

문제는, 때로는 빠르게 배포 한 가능 필요가없는 작은 패치를해야 할 것이다 : 나는 문제없이 유지 보수 및 캐시 지우기에 내 사이트를 넣어 사용자 지정 작업과 흐름을 변경 관리해야 유지 보수 모드를 비활성화하거나 캐시를 비울 수 있습니다.

카프리 스트 라노와 함께 할 수 있습니까?

가능한 대안으로 전체 배포 프로세스를 만들지 않고 모든 서버에 간단한 패치를 배포하는 방법 인 capistrano-patch도 살펴 보았습니다. 그것은 몇 년 동안 벤을 업데이 트하지 않은 것 같아요 그리고 나는 카피 스트라 노 3와 함께 작동하지 않을 거라 생각합니다. 카프리 스트라 노 3 핫 픽스를 할 비슷한 아이디어?

+0

나는 아래에 답변을 추가했지만 capistrano-patch에 대해서는 언급하지 않았습니다. 나는 Capistrano 3에 상응하는 것을 모른다. –

답변

0

환경 변수를 사용하여 무언가를 우회해야한다고 명시 할 수 있습니다. 당신은 아마의 일부를 단순화 할 방법을 쓸 수, 당신이 잘 루비를 알고있는 경우

desc 'Purge all internal Moodle caches' 
task :'purge-caches' do 
    if ENV['NO_CACHE_PURGE'].nil? 
    on roles(:admin) do 
     execute :sudo, '-u', 'www-data-aulatp', '/usr/bin/php7.0', current_path.join('admin', 'cli', 'purge_caches.php') 
    end 
    else 
    puts 'Skipping purge-caches due to env variable' 
    end 
end 

, 당신은이 작업을 자동화 할 : 예, 당신은 NO_CACHE_PURGE=true cap production deploy와 배포를 실행 한 다음 같은과 관련 코드를 래핑 수 이 코드 (다음 코드는 테스트되지 않았습니다) :

def disableable_task(*args) 
    if ENV[args[:env_name]].nil? 
    task(args) 
    else 
    puts "Skipping #{args[0]} due to #{args[:env_name]} environment variable being set" 
end 

desc 'Purge all internal Moodle caches' 
disableable_task :'purge-caches', env_name: 'NO_CACHE_PURGE' do 
    on roles(:admin) do 
    execute :sudo, '-u', 'www-data-aulatp', '/usr/bin/php7.0', current_path.join('admin', 'cli', 'purge_caches.php') 
    end 
end