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
更新:カピストラーノ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を使用して渡します。)
更新。 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
時間を節約できることを願っています。
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 をご覧ください。このアプローチがあなたにも役立つかもしれません。
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
非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'