33

Capistrano を一般的なデプロイ ソリューションとして使用する可能性を検討しています。「汎用」とは、非レールを意味します。私が見つけたドキュメントの質には満足していませんが、確かに、あなたが Rails をデプロイしていると推測するものは見ていません。そのため、いくつかの例に基づいて何かをハックしようとしますが、最初から直面している問題がいくつかあります。

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

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

では、どうすればこれらのことを達成できますか?

セカンドリリースのファーストスプリントの結果を展開したい。これは、git リポジトリで としてタグ付けされていますr2s1。また、ユーザー「johndoe」がシステムを展開するタスクを取得するとします。リポジトリにアクセスするには、URL を使用する必要がありますjohndoe@gitsrv.domain:app。そのため、リポジトリのリモート URL はユーザー ID によって異なります。

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

git clone johndoe@gitsrv.domain:app
cd app
git checkout r2s1
4

5 に答える 5

48

更新: Capistrano 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

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

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

于 2012-04-24T00:22:22.527 に答える
20

アップデート。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 pull command line arguments

完全を期すために、以下のコードを参照して、使用できる 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

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

于 2016-10-15T15:57:43.880 に答える
10

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

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

$ GIT_REPO="johndoe@gitsrv.domain: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を見てください。このアプローチはあなたにも役立つかもしれません。

于 2012-04-24T06:03:02.043 に答える
3

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
于 2014-05-06T10:38:26.650 に答える
0

非レール展開に役立つライブラリについては、capistrano-ashを確認してください。PyroCMS アプリを展開するために使用していますが、うまく機能します。

そのプロジェクトの Capfile からのスニペットを次に示します。

# deploy from git repo
set :repository, "git@git.mygitserver.com:mygitrepo.git"
# tells cap to use git
set :scm, :git

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

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

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

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

set :scm_user, 'someuser'
于 2012-04-23T23:54:19.827 に答える