2013-08-09 3 views
6

현재 TFS 2013 (로컬 설치)을 사용하여 LDAP 인증을 사용하여 내부 GitHub Enterprise 설치를 시도합니다.개인 저장소가있는 TFS 빌드에서 libgit2를 구성하는 방법은 무엇입니까?

내가 얻는 문제는 소스 코드에 액세스 할 수 없다는 것입니다. 어떻게 특정 인증을 사용하기 위해 TFS Build를 구성 할 수 있습니까? TFS에서

는 로그인

예외 메시지를 작성 : 오류가 libgit2에 의해 제기되었다. 범주 = Net (오류).

VS30063 : https://user:[email protected]에 액세스 할 수있는 권한이 없습니다. (타입 LibGit2SharpException)

예외 데이터 사전 :

libgit2.code = -1

libgit2.category = 11

예외 스택 추적 :

서버 스택 트레이스 :

at LibGit2Sharp.Core.Ensure.HandleError (Int32 result) at LibGit2Sharp.Core.Proxy.git_clone (Strin GtCloneOptions opts) at LibGit2Sharp.Repository.Clone (String sourceUrl, String workdirPath, Boolean 베어러, 부울 체크 아웃, TransferProgressHandler onTransferProgress, CheckoutProgressHandler onCheckoutProgress, 자격증 명 정보) at 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

감사합니다. 기회가 생기 자마자 확인해 드리겠습니다. 필요할 때마다 해결할 수 있습니다. –