2013-08-09 18 views
6

Aktualnie korzystam z TFS 2013 (instalacja lokalna), aby spróbować zbudować z wewnętrznej instalacji GitHub Enterprise przy użyciu uwierzytelniania LDAP.Jak skonfigurować libgit2 w TFS Build z prywatnymi repozytoriami?

Problem polega na tym, że nie można uzyskać dostępu do kodu źródłowego, w jaki sposób mogę skonfigurować kompilację TFS do korzystania z określonego uwierzytelniania?

Z TFS Buduj Log

Exception Message: Błąd został podniesiony przez libgit2. Kategoria = Sieć (błąd).

VS30063: Nie masz uprawnień dostępu do https://user:[email protected]. (Typ LibGit2SharpException)

wyjątek danych Dictionary

libgit2.code = -1

libgit2.category = 11

Wyjątek stos Ślad:

serwera ślad stosu:

w LibGit2Sharp.Core.Ensure.HandleError (wynik Int32) w LibGit2Sharp.Core.Proxy.git_clone (Strin g url, WORKDIR String GitCloneOptions zdecyduje) na LibGit2Sharp.Repository.Clone (String sourceUrl, String workdirPath, Boolean nagie, Boolean kasa, TransferProgressHandler onTransferProgress, CheckoutProgressHandler onCheckoutProgress, poświadczenia poświadczenia) na Microsoft.TeamFoundation.Build.Activities.Git. GitPull.GitClone.GetRepository (ciąg repositoryUrl, String workingFolder) w System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage (IntPtr MD, obiekt [] arg, serwer obiektu, obiekt [] & outArgs) w System.Runtime.Remoting .Messaging.StackBuilderSink.AsyncProcessMessage (iMessage MSG IMessageSink replySink)

Wyjątek rethrown w [0]

w System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper (Message reqMsg, logiczna bProxyCase) w System.Runtime.Remoting.Proxies.RemotingProxy.Invoke (Przedmiot NotUsed, MessageData & msgData) w 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.Activities.IAsyncCodeActivity.FinishExecution (kontekstowe AsyncCodeActivityContext, wynik IAsyncResult) na System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Execute (wykonawcę ActivityExecutor, bookmarkManager bookmarkManager)

Kontynuacja

Próbowałem params URL uwierzytelniania (przykład)

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

Więcej Kontynuacja

całkowicie odinstalowany, a aktualizacja do 2013 RC, komunikat o błędzie został zaktualizowany jak również, ponieważ jest inaczej.

Próbowałem także skonfigurować kontroler kompilacji, aby działał jako uwierzytelniony użytkownik LDAP w instalacji przedsiębiorstwa Github.

Odpowiedz

0

To dziwne. Wygląda na to, że transport HTTP powinien być honor url-encoded credentials.

W każdym razie może być lepiej i bezpieczniej skonfigurować pilota, aby uzyskać referencje z innych źródeł. Kod klonu jest dobrym przykładem tego, jak to zrobić: here's, jak skonfigurować wywołanie zwrotne i here's, przykład generowania obiektu referencji.

+0

Te linki wydają się pomocne, jeśli chodzi bezpośrednio o lib2git, niestety używam interfejsu TFS i domyślnych kompilacji. Dzięki za linki. –

+0

Ah, przepraszam, nie jestem ekspertem TFS. Powodzenia! –

+0

Mimo to dziękuję za odpowiedź. Mogliśmy stwierdzić, że problemem może być nasza instalacja firmy Github. –

2

Libgit2 obsługuje poświadczenia adresu URL, jednak działania budowania TFS dla GitPull zastępują domyślne zachowanie z klasą Microsoft.TeamFoundation.Build.Activities.Git.TfsSmartSubtransport dla protokołu http i https.

Ta klasa niestety ignoruje poświadczenia w adresie URL, a zamiast tego próbuje odzyskać poświadczenia z rejestru.

Udało mi się uzyskać serwer budujący TFS do pobrania kodu źródłowego z serwera gitlab przy użyciu budowania TFS z domyślnym przepływem pracy GitTemplate.12.xaml.

Skonfiguruj adres URL repozytorium TFS bez żadnych poświadczeń w adresie URL.

Zaszyfrowano hasło do poświadczenia za pomocą następującego fragmentu kodu. To musi zostać uruchomione na serwerze kompilacji, ponieważ proces szyfrowania jest specyficzny dla maszyny lokalnej, na której jest wykonywany.

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

Dodaj następujące ustawienia rejestru do swojego serwera budowania.

UWAGA: Adres URL w rejestrze musi dokładnie odpowiadać bezwzględnemu adresowi URL repozytorium lub system TFS nie znajdzie poświadczeń.

[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" 

Jedyne inne alternatywy dla takiego podejścia, że ​​mogę myśleć jest zmiana domyślnego workflow i zastąpić aktywności GitPull z czegoś innego.

Nie sugeruję, że jest to najlepsza metoda, ale zadziałało.

+0

Dziękuję za to, sprawdzę to, gdy tylko dostanę szansę, może to być praca, której potrzebuję. –

Powiązane problemy