Подтвердить что ты не робот

Capistrano 3 вытягивает аргументы командной строки

Я в процессе обновления от Capistrano 2 до Capistrano 3. В Cap 2 я использовал следующее, чтобы взять аргумент командной строки в качестве имени ветки (в противном случае по умолчанию - master)

set :branch, fetch(:branch, "master")

Если я позвонил cap deploy, он развернет главную ветвь. Но это также позволило мне сделать что-то вроде этого:

cap deploy -S branch=foo

Что бы развернуть ветвь foo.

Теперь, в Capistrano 3, если я попытаюсь запустить выше, я получаю сообщение об ошибке: invalid option: -S.

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

4b9b3361

Ответ 1

Задачи Rake (использование кеша) поддерживают аргументы.

namespace :test do
  desc "Test task"
  task :test, :arg1 do |t, args|
    arg1 = args[:arg1]
    puts arg1
  end
end

cap -T выходы:

cap yiic: test [arg1] # Задача тестирования

Пример вызова:

производство колпачка yiic: test [test1]

Кроме того, здесь полезно сообщение

P.S.: вы должны использовать env vars для "глобальных" настроек. Подобно общим значениям для нескольких задач.

Ответ 2

В результате я установил переменную ENV.

Итак, теперь я могу позвонить

cap production deploy branch=mybranch

И он развернет mybranch. Если я запустил простой cap production deploy, он разворачивает ветвь по умолчанию (master, если вы ее не задали, но я изменил свое ниже на default, чтобы продемонстрировать)

Это код, который я ввел в мой файл deploy.rb:

set :branch, "default"
if ENV['branch']
        set :branch, ENV['branch']
end

Ответ 3

Предоставить обновленное и рабочее решение для Capistrano 3 (так как мне потребовалось некоторое время, чтобы найти и слишком много тестов, чтобы заставить его работать).

Мои файлы похожи на:

config/
    deploy/
        staging.rb
        production.rb
    deploy.rb
...
Capfile

В staging.rb у меня есть:

server 'staging', roles: %w(db)

set :branch,    ENV.fetch('REVISION', 'master')
set :use_sudo,  false
set :user,      'toto'
set :deploy_to, '/var/www'

server 'staging', staging является связью SSH, определенной в моем .ssh/config)

Затем, чтобы развернуть конкретную ревизию, мне просто нужно позвонить:

cap staging deploy REVISION=3b2d9ab

Где 3b2d9ab - это хэш-код Git commit (короткая или длинная версия).