web-dev-qa-db-ja.com

Capistranoにパラメーターを渡す

Capistranoを一般的な展開ソリューションとして使用する可能性を検討しています。 「ジェネリック」とは、非レールを意味します。私が見つけたドキュメントの品質には満足していませんが、当然のことながら、Railsをデプロイしていると思われるドキュメントは見ていません。そのため、いくつかの例に基づいてハッキングを試みますが、最初から直面している問題がいくつかあります。

私の問題は、cap deployには、何もするのに十分な情報がありません。重要なのは、デプロイしたいバージョンのタグがなく、このがコマンドラインで渡されることです。

もう1つの問題は、gitリポジトリの指定方法です。 gitサーバーはユーザーのアカウントでSSHによってアクセスされますが、変更方法がわかりませんdeploy.rbは、ユーザーのIDをscm URLの一部として使用します。

だから、これらのことをどのように達成するのですか?

2回目のリリースの最初のスプリントの結果を展開します。これは、gitリポジトリでr2s1。また、ユーザー "johndoe"がシステムを展開するタスクを取得したとします。リポジトリにアクセスするには、URL [email protected]:app。そのため、リポジトリのリモートURLはユーザーIDに依存します。

目的のファイルを取得するコマンドラインは次のとおりです。

git clone [email protected]:app
cd app
git checkout r2s1
31

更新:カピストラーノ3については、 scieslakの答え を参照してください。


Jarradが言ったように、capistrano-ashは他のプロジェクトタイプをデプロイするためのヘルパーモジュールの優れた基本セットですが、その日の終わりには必須ではありません。これは単なるスクリプト言語であり、ほとんどのタスクはシステムコマンドで実行され、最終的にはほぼシェルスクリプトのようになります。

パラメーターを渡すには、capの実行時に-sフラグを設定して、キーと値のペアを提供します。最初にこのようなタスクを作成します。

desc "Parameter Testing"
task :parameter do
  puts "Parameter test #{branch} #{tag}"
end

次に、そのようにタスクを開始します。

cap test:parameter -s branch=master -s tag=1.0.0

最後の部分について。サーバーへのsshキーを使用してパスワードなしのアクセスを設定することをお勧めします。ただし、現在ログインしているユーザーから取得する場合。このようなことができます。

desc "Parameter Testing"
task :parameter do
  system("whoami", user)
  puts "Parameter test #{user} #{branch} #{tag}"
end

UPDATE:Capistranoの最新バージョンで動作するように編集されました。構成配列は使用できなくなりました。

グローバルパラメータ:コメントを参照パラメータをグローバルに使用するには、set:branch、fetch(:branch、 'a-default-value')を使用します。 (代わりに-Sを使用して渡します。)

47

更新。 Capistrano 3タスクのみにパラメーターを渡すことについて

この質問はかなり古いことを知っていますが、Capistranoタスクにパラメーターを渡すために検索すると、Googleで最初にポップアップします。残念ながら、Jamie Sutherlandが提供する素晴らしい回答はCapistrano 3では無効になりました。以下のような結果を除いて、時間をかけて試してみてください。

cap test:parameter -s branch=master 

出力:

cap aborted!
OptionParser::AmbiguousOption: ambiguous option: -s
OptionParser::InvalidOption: invalid option: s

そして

cap test:parameter -S branch=master 

出力:

invalid option: -S

@senzとBrad Dwyerが提供するCapistrano 3の有効な回答は、次のゴールドリンクをクリックして見つけることができます。 Capistrano 3 pullingコマンドライン引数

完全を期すために、以下のコードを参照して、2つのオプションについて調べてください。

最初のオプション:

通常のハッシュと同様に、キーと値を使用してタスクを反復できます。

desc "This task accepts optional parameters"

task :task_with_params, :first_param, :second_param do |task_name, parameter|
  run_locally do
    puts "Task name: #{task_name}"
    puts "First parameter: #{parameter[:first_param]}"
    puts "Second parameter: #{parameter[:second_param]}"
  end
end

Capを呼び出すときは、パラメーター間にスペースがないことを確認してください。

cap production task_with_params[one,two]

2番目のオプション:

タスクを呼び出す間、環境変数を割り当ててからコードから呼び出すことができます。

set :first_param, ENV['first_env'] || 'first default'
set :second_param, ENV['second_env'] || 'second default'

desc "This task accepts optional parameters"
task :task_with_env_params do
  run_locally do
    puts "First parameter: #{fetch(:first_param)}"
    puts "Second parameter: #{fetch(:second_param)}"
  end
end

環境変数を割り当てるには、以下のようにcapを呼び出します。

cap production task_with_env_params first_env=one second_env=two

時間を節約できることを願っています。

13
scieslak

ENV変数を使用することをお勧めします。

このようなもの(コマンド):

$ GIT_REPO="[email protected]:app" GIT_BRANCH="r2s1" cap testing

キャップ設定:

#deploy.rb:
task :testing, :roles => :app do
  puts ENV['GIT_REPO']
  puts ENV['GIT_BRANCH']
end

https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension をご覧ください。このアプローチがあなたにも役立つかもしれません。

9
deadrunk

Jamieが既に示したように、-sフラグを使用してタスクにパラメーターを渡すことができます。さらにデフォルト値を使用する方法を紹介します。

デフォルト値を使用する場合は、||=の代わりにfetchを使用するか、nilを確認する必要があります。

namespace :logs do
  task :tail do
    file = fetch(:file, 'production') # sets 'production' as default value
    puts "I would use #{file}.log now"
  end
end

このタスクは次のいずれかで実行できます(productionにデフォルト値fileを使用)

$ cap logs:tail

または(cronに値fileを使用します

$ cap logs:tail -s file=cron
3
tbuehl

非Rails展開に役立つライブラリについては、 capistrano-ash をご覧ください。 PyroCMSアプリをデプロイするために使用しますが、うまく機能します。

そのプロジェクトのCapfileの抜粋を次に示します。

# deploy from git repo
set :repository, "[email protected]:mygitrepo.git"
# tells cap to use git
set :scm, :git

質問の最後の2つの部分を理解したかどうかはわかりません。詳細をお知らせください。喜んでお手伝いさせていただきます。

与えられた例の後の編集:

set :repository, "#{scm_user}@gitsrv.domain:app"

その後、デプロイ権限を持つ各ユーザーは、ローカルの〜/ .caprcファイルに次を追加できます。

set :scm_user, 'someuser'
0
jarrad