2013-08-09 1 views
6

現在、TFS 2013(ローカルインストール)を使用して、LDAP認証を使用して内部GitHub Enterpriseインストールからビルドを試みています。TFSでlibgit2を設定するにはプライベートレポジトリを使用してビルドしますか?

私が得ている問題は、ソースコードにアクセスできないということです。どのようにして特定の認証を使用するようにTFS Buildを構成できますか? TFSから

はログイン

例外メッセージをビルドします。エラーがlibgit2によって育てられました。カテゴリ=ネット(エラー)。

VS30063:https://user:[email protected]にアクセスする権限がありません。 (タイプLibGit2SharpException)

例外データ・ディクショナリ:

libgit2.code = -1 = 11

例外スタック・トレース

libgit2.category:

サーバースタックトレース:

at LibGit2Sharp.Core.Ensure.HandleError(Int32 result) at LibGit2Sharp.Core.Proxy.git_clone(Strin GtCloneOptions opts) LibGit2Sharp.Repository.Clone(String sourceUrl、String workdirPath、ブールベア、ブールチェックアウト、TransferProgressHandler onTransferProgress、CheckoutProgressHandler onCheckoutProgress、Credentials資格情報) 、Microsoft.TeamFoundation.Build.Activities.Git。 System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessageでGitPull.GitClone.GetRepository(文字列repositoryUrl、列workingFolder) System.Runtime.Remotingで(のIntPtr MDは、[]引数、オブジェクトのサーバ、[] & outArgsオブジェクトをオブジェクト) .Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg、IMessageSink replySink)

[0]で再評価された例外:

System.Func 3.EndInvoke(IAsyncResult result) at Microsoft.TeamFoundation.Build.Activities.Git.GitPull.GitRepositoryBase.EndExecute(AsyncCodeActivityContext context, IAsyncResult result) at System.Activities.AsyncCodeActivity 1における System.Runtime.Remoting.Proxies.RemotingProxy.InvokeでSystem.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(メッセージreqMsg、ブールbProxyCase) (NOTUSED、のMessageData & msgDataオブジェクト)で

0 System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Executeで.System.Activities.IAsyncCodeActivity.FinishExecution(AsyncCodeActivityContextコンテキストたIAsyncResult結果) (ActivityExecutorエグゼキュータ、BookmarkManager bookmarkManager)

をフォローアップ

は私が

https://username:[email protected]/user/project.git

詳細は、フォローアップ認証用URL paramsは(例)を試してみました

2013 RCに完全にアンインストールや更新、エラーメッセージが更新されました同様に、それは異なっている。

また、githubエンタープライズインストールで認証されたLDAPユーザーとして実行するようにビルドコントローラを設定しようとしました。

答えて

0

これは奇妙です。 HTTPトランスポートはhonor url-encoded credentialsのように見えます。

いずれの場合でも、リモートから別の場所から資格情報を取得するようにリモートを設定する方が安全です。クローンコードは、これを行う方法の良い例です:here'sコールバックを設定する方法、およびhere'sは資格情報オブジェクトを生成する方法の例です。

+0

これらのリンクはlib2gitを直接処理する場合に便利です。残念ながら、私はTFSインターフェイスとデフォルトのビルドを使用しています。しかし、リンクをありがとう。 –

+0

ああ、申し訳ありませんが、私はTFSの専門家ではありません。がんばろう! –

+0

とにかく応答に感謝します。我々はgithub企業のセットアップが問題であるかもしれないことを認識したかもしれない。 –

2

Libgit2はURL資格情報をサポートしていますが、GitPullのTFSビルドアクティビティは、httpおよびhttpsプロトコルのMicrosoft.TeamFoundation.Build.Activities.Git.TfsSmartSubtransportクラスを使用してデフォルト動作をオーバーライドします。

このクラスは残念なことにURL内の資格情報を無視し、代わりにレジストリから資格情報を取得しようとします。

デフォルトのGitTemplate.12.xamlワークフローでTFSビルドを使用して、gitlabサーバーからソースコードを取得するためのTFSビルドサーバーを正常に取得できました。

URLに資格情報を指定しないでTFSビルドのリポジトリURLを設定します。

資格情報のパスワードを次のコードで暗号化しました。これは、暗号化プロセスが実行されているローカルマシンに固有のものであるため、ビルドサーバー上で実行する必要があります。

var password = "your_password"; 
var bytes = Encoding.Unicode.GetBytes(password); 
var bytes2 = ProtectedData.Protect(bytes, null, DataProtectionScope.LocalMachine); 
var base64 = Convert.ToBase64String(bytes2); 

ビルドサーバーに次のレジストリ設定を追加します。

注:レジストリのURLは、リポジトリの絶対URLと完全に一致する必要があります。そうしないと、TFSは資格情報を見つけられません。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\TeamFoundationServer\12.0\HostedServiceAccounts\Build\http://githubrepository.corp.company.net] 
"Microsoft_TFS_UserName"="<username goes here>" 
"Microsoft_TFS_Password"="<bas64 encrypted password goes here>" 
"Microsoft_TFS_CredentialsType"="Windows" 

私は考えることができ、このアプローチの唯一の他の選択肢は、デフォルトのワークフローを変更し、何か他のものでGitPull活動を交換することです。

私はこれが最善の方法だとは思わないが、それは私のために働いた。

+0

これはありがとうございます、私はチャンスを得るとすぐにそれをチェックします、これは私が必要とされた周りの仕事かもしれません。 –

関連する問題