2013-08-09 9 views
6

Ich verwende derzeit TFS 2013 (lokale Installation), um zu versuchen, aus einer internen GitHub Enterprise-Installation mit LDAP-Authentifizierung zu erstellen.Wie konfiguriere ich libgit2 in TFS Build mit privaten Repositories?

Das Problem, das ich bekomme, ist, dass es nicht auf den Quellcode zugreifen kann, wie kann ich TFS Build konfigurieren, um eine bestimmte Authentifizierung zu verwenden?

Aus dem TFS Build Log

Ausnahmemeldung: Ein Fehler wurde von libgit2 angehoben. Kategorie = Net (Fehler).

VS30063: Sie sind nicht berechtigt, auf https://user:[email protected] zuzugreifen. (Typ LibGit2SharpException)

Exception Data Dictionary:

libgit2.code = -1

libgit2.category = 11

Ausnahme-Stack-Trace:

Server-Stack-Trace:

bei LibGit2Sharp.Core.Ensure.HandleError (Int32 Ergebnis) bei LibGit2Sharp.Core.Proxy.git_clone (Strin g url, String workdir, entscheidet sich GitCloneOptions) bei LibGit2Sharp.Repository.Clone (String SourceURL, String workdirPath, Boolean blank, Boolean Kasse, TransferProgressHandler onTransferProgress, CheckoutProgressHandler onCheckoutProgress, Credentials Berechtigungsnachweise) bei Microsoft.TeamFoundation.Build.Activities.Git. GitPull.GitClone.GetRepository (String repositoryUrl, String workingFolder) bei System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage (IntPtr md, Object [] args, Object-Server, Object [] & outArgs) bei System.Runtime.Remoting .Messaging.StackBuilderSink.AsyncProcessMessage (IMessage msg, IMessageSink replySink)

Ausnahme bei [0]:

bei System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper (Message reqMsg, Boolean bProxyCase) bei System.Runtime.Remoting.Proxies.RemotingProxy.Invoke (Object NOTUSED, Message & MsgData) bei 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 (AsyncCodeActivityContext Zusammenhang IAsyncResult result) bei System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Execute (ActivityExecutor Testamentsvollstrecker, Bookmarkbookmarkmanager)

Follow-up

Ich habe die URL params für die Authentifizierung (Beispiel)

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

versucht

Mehr Follow-up

vollständig deinstalliert und Aktualisierung des 2013 RC, hat Fehlermeldung aktualisiert genauso, wie es anders ist.

Ich habe auch versucht, den Build-Controller so einzurichten, dass er als authentifizierter LDAP-Benutzer in der github Enterprise-Installation ausgeführt wird.

Antwort

0

Das ist seltsam. Es sieht so aus, als ob der HTTP-Transport honor url-encoded credentials sein sollte.

In jedem Fall könnte es besser und sicherer sein, die Remote einzurichten, um die Anmeldeinformationen von woanders zu erhalten. Der Kloncode ist ein gutes Beispiel dafür: here's, wie Sie den Rückruf einrichten, und here's ein Beispiel zum Generieren des Anmeldeinformationenobjekts.

+0

Diese Links scheinen hilfreich zu sein, wenn ich direkt mit lib2git arbeite, leider benutze ich die TFS-Schnittstelle und die Standard-Builds. Danke für die Links. –

+0

Ah, tut mir leid, ich bin kein TFS-Experte. Viel Glück! –

+0

Danke trotzdem für die Antwort. Wir haben möglicherweise festgestellt, dass unser Setup von github enterprise das Problem sein könnte. –

2

Libgit2 unterstützt die URL-Anmeldeinformationen, jedoch überschreiben TFS-Erstellungsaktivitäten für GitPull das Standardverhalten mit einer Microsoft.TeamFoundation.Build.Activities.Git.TfsSmartSubtransport-Klasse für das HTTP- und HTTPS-Protokoll.

Diese Klasse ignoriert leider Anmeldeinformationen in der URL und versucht stattdessen, Anmeldeinformationen aus der Registrierung abzurufen.

Ich konnte erfolgreich einen TFS-Build-Server erhalten, um Quellcode von einem Gitlab-Server mit TFS-Build mit dem Standard-Workflow GitTemplate.12.xaml zu ziehen.

Richten Sie die Repository-URL des TFS-Builds ohne Anmeldeinformationen in der URL ein.

Verschlüsselte das Passwort Ihres Credentials mit dem folgenden Bit Code. Dies muss auf dem Build-Server ausgeführt werden, da der Verschlüsselungsprozess spezifisch für den lokalen Computer ist, auf dem er ausgeführt wird.

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

Fügen Sie dem Buildserver die folgenden Registrierungseinstellungen hinzu.

HINWEIS: Die URL in der Registrierung muss genau mit der absoluten URL Ihres Repositorys übereinstimmen oder TFS findet die Anmeldeinformationen nicht.

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

Die einzigen anderen Alternativen zu diesem Ansatz, den ich von ist einfiel den Standard Workflow und ersetzen Sie die GitPull Aktivität mit etwas anderem zu ändern.

Ich behaupte nicht, dass dies die beste Methode ist, aber es hat für mich funktioniert.

+0

Danke dafür, werde es überprüfen, sobald ich eine Chance habe, dies könnte die Arbeit sein, die ich brauchte. –

Verwandte Themen