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
.
Какой правильный способ передать аргумент через командную строку?
Ответы
Ответ 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 (короткая или длинная версия).