2

NAnt(V0.86.3317.0)を使用してSourceGear Vault(V4.1.4)でいくつかのタスクを実行したいと考えています。

VaultにNAntからのWindows認証を使用して接続を作成させる方法はありますか?

ボールト接続を初期化するために使用しているNAntブロックは次のとおりです。

<target name="InitialiseVaultSettings">
<echo>InitialiseVaultSettings</echo>
<vaultsetloginoptions user="${vault.Username}" password="${vault.Password}" URL="${vault.Host}" repository="${vault.Repository}" />
<vaultsetworkingfolder repositoryFolderPath="${vault.Folder}" diskPath="${vault.WorkingDirectory}" createDiskPath="true" />

私は他の開発者と一緒にプロジェクトに取り組んでいるので、ユーザー名とパスワードをNAntビルドファイルにハードコーディングすることはお勧めできません。usernameとの両方がコマンドpasswordの必須オプションです。vaultsetloginoptions

他の選択肢(すべてキャッチ付き)には次のものがあります。

(a)「Admin」アカウントをNAntプロパティにハードコーディングし、それを使用してボールトにログインします。NAntスクリプトが実行するチェックイン/チェックアウト操作の責任者の監査証跡が失われるため、これはそれほど素晴らしいことではありません。また、ソリューションでファイルがチェックアウトされている場合にも問題が発生します(スクリプトの一部により、Vaultでラベルを生成する前に、すべてのファイルがソース管理にチェックインされます)。

(b)NAntコードのC#スクリプトを使用して、ユーザー名とパスワードのプロパティを動的に設定します...ただし、ユーザーからパスワードを取得する際に問題が発生する場合を除きます。

(c)Vaultクライアントから保存されたプロファイル情報を読み取り、それを使用して接続します(保存場所がわからない場合を除く)。

4

3 に答える 3

1

この問題を回避するためのプロトタイプを成功裏に実装しました。

以下に説明する回避策の完全なソースとバイナリは、ここにあります。

Vaultログイン拡張機能

私はいくつかのカスタムNAntタスクと関数を作成しました。

<VaultLogin>以前に保存されたユーザー名とパスワードの情報について、Windowsレジストリをチェックします。見つからない場合は、ログインウィンドウでユーザーにプロンプ​​トを表示します。エントリを2つの関数に保存し、レジストリをクリアします(ログインが失敗した場合-以下を<SaveVaultLogin>参照):

${VaultLoginFunctions::UserName()}
${VaultLoginFunctions::Password()}

その後、<vaultsetloginoptions>タスクは次の関数を使用できるようになります。

<vaultsetloginoptions user="${VaultLoginFunctions::UserName()}" password="${VaultLoginFunctions::Password()}" URL="${vault.Host}" repository="${vault.Repository}" />

タスクを呼び出した後、ユーザー名とパスワードの値をレジストリに書き戻すタスクを<vaultsetloginoptions>呼び出します。<SaveVaultLogin>これにより、成功した認証の詳細のみが保存されます(ユーザー名とパスワードが正しくない場合、スクリプトはタスクで失敗するため)。

これはまとめられたコードブロックです:

  <target name="InitialiseVaultSettings">
<echo>InitialiseVaultSettings</echo>

<loadtasks assembly="CompassHealth.NAntExtensions.Tasks.dll" />

<VaultLoginGet />
<echo message="UserName = ${VaultLoginFunctions::UserName()}" />

<vaultsetloginoptions user="${VaultLoginFunctions::UserName()}" password="${VaultLoginFunctions::Password()}" URL="${vault.Host}" repository="${vault.Repository}" />

<vaultsetworkingfolder repositoryFolderPath="${vault.Folder}" diskPath="${vault.WorkingDirectory}" createDiskPath="true" />


<!-- need to save the login here, as it is cleared once VaultLoginGet is called, this ensures that only correct username and password are stored -->
<VaultLoginSave />    

更新:投稿の上部にある回避策のバイナリとソースへのリンク。

于 2009-06-14T22:41:13.940 に答える
0

Scott Saad の提案を見た後、残念ながらコマンド ライン ツールには、Windows 認証を使用して呼び出すオプションがないようです。

私の現在の考えは上記(b)に沿っています。

Nant スクリプトから呼び出すことができるライブラリを作成し、現在の Windows ユーザーの Vault ユーザー名とパスワードを要求します。

ライブラリは、以前に入力された Vault ユーザー名のレジストリ エントリを検索し、この Windows ユーザーのログインを行います。存在する場合は、ユーザーの操作なしでスクリプトに渡されます。

このユーザー名/パスワードがボールトへのログインに失敗した場合、または存在しない場合、ライブラリは、ユーザーが現在のボールトのユーザー名とパスワードを入力するためのダイアログを提供します。

ユーザーのエントリはレジストリに保存されます (暗号化されます)。これは、Vault のユーザー名とパスワードが変更されるたびに 1 回だけ入力する必要があることを意味します。

理想的な解決策ではありませんが、比較的簡単で、十分な回避策として受け入れられるはずです。

どう思いますか?

于 2009-05-31T10:15:40.910 に答える