Fabricでこのようなものを実行できないと仮定します。
run("svn update --password 'password' .")
リモートインタラクティブコマンドラインのパスワードをFabricに渡す適切な方法はどのようになっていますか?
問題は、リポジトリがsvn + sshとしてチェックアウトされており、http / https/svnオプションがないことです。
SSHkeyを試してください。パスワードなしでサーバーに接続できます。この場合、リモートサーバーとリポジトリの間にsshkeyを設定する必要があります。
リモートサーバーで:キーペアを生成します
$ ssh-keygen -t dsa
パスフェーズは空のままにします。これにより、2つのファイルが生成されます
次に、id_dsa.pubのコンテンツをリポジトリサーバーの〜/ .ssh/authorized_keysに追加します。
リモートサーバーは、パスワードを必要とせずにソースツリーを更新できます。
パスワードをログから隠したいだけの場合は、次のようなものを使用できます。
from fabric.state import output
def xrun(command, hidden='', *args, **kwargs):
old_state = output.running
output.running = False
print '[%s] run: %s' % (env.host_string, command)
run(command + hidden, *args, **kwargs)
output.running = command
xrun('svn update', '--password "your password"')
しばらく前にこれと同様の問題が発生し、実際にFabricの新機能を提案しましたが、話を聞いた開発者は代わりにこれを提案しました。
import getpass
password = getpass.getpass('Enter SVN Password: ')
run("svn update --password '%s'" % password)
これにより、ファブリックがこのコマンドを実行するときにパスワードの入力を求められます。
これにより、ファブリックログにパスワードが表示されると思いますが、SVNにパスワードの入力を求め、パスワードをエコーすることをお勧めします。
run('echo %s | svn update --password' % password)
私はSVNを使用していませんので、それが可能かどうかはわかりません。他の誰かがそこで助けてくれることを願っています!
インタラクティブなコマンドラインを自動化するための私の標準的な答えは「expectを使用する」ですが、Pythonを使用しているので、「 Pexpectを使用する」に少し改良します。
PexpectをFabric内に統合するには少し考える必要があるかもしれません。さもないと、この特定のケースではPexpectだけにフォールバックしてしまうかもしれません。しかし、それは間違いなく私が行く方法です。
ユーザーにも提供する必要があるかもしれませんか?そうでない場合は、リポジトリをエクスポートし、サーバーにアップロードしてデプロイするために(ローカルで)tarを作成する方が幸運かもしれません。svnコマンドをローカルで実行すると、ユーザー名やパスワードの入力を求められるようになります。
Fabricのenvドキュメントを確認する必要があります。次のようなものを作成する必要があると述べられています。
from fabric.api import env
env.user = 'your_user'
env.password = 'your_password'
それが役に立てば幸い!