2013-08-09 28 views
6

Attualmente sto usando TFS 2013 (installazione locale) per provare a creare da un'installazione interna di GitHub Enterprise utilizzando l'autenticazione LDAP.Come configurare libgit2 in TFS Build con repository privati?

Il problema che sto ottenendo è che non può accedere al codice sorgente, come posso configurare TFS Build per utilizzare un'autenticazione specifica?

Dal TFS Costruire Log

Messaggio eccezione: Un errore è stato sollevato da libgit2. Categoria = Net (errore).

VS30063: non è autorizzato ad accedere a https://user:[email protected]. (Tipo LibGit2SharpException)

Eccezione Data Dictionary:

libgit2.code = -1

libgit2.category = 11

Eccezione dello stack:

Server stack trace:

su LibGit2Sharp.Core.Ensure.HandleError (risultato Int32) su LibGit2Sharp.Core.Proxy.git_clone (Strin g url, String workdir, GitCloneOptions opta) a LibGit2Sharp.Repository.Clone (String SourceURL, String workdirPath, booleano nuda, cassa booleano, TransferProgressHandler onTransferProgress, CheckoutProgressHandler onCheckoutProgress, le credenziali credenziali) a Microsoft.TeamFoundation.Build.Activities.Git. GitPull.GitClone.GetRepository (String repositoryUrl, String workingFolder) a System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage (IntPtr md, Object [] args, il server oggetto, oggetto [] & outArgs) a System.Runtime.Remoting .Messaging.StackBuilderSink.AsyncProcessMessage (IMessage msg, IMessageSink replySink)

Eccezione rilanciati a [0]:

a System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper (Messaggio reqMsg, booleano bProxyCase) a System.Runtime.Remoting.Proxies.RemotingProxy.Invoke (Object NotUsed, MessageData & MSGDATA) a 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 (contesto AsyncCodeActivityContext, risultato IAsyncResult) a System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Execute (esecutore ActivityExecutor, BookmarkManager BookmarkManager)

Follow-up

Ho provato il params URL per l'autenticazione (esempio)

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

Più follow-up

completamente disinstallato e aggiornamento per il 2013 RC, il messaggio di errore è stato aggiornato così come è diverso.

Ho anche provato a configurare il controller di build per l'esecuzione come utente LDAP autenticato nell'installazione aziendale github.

risposta

0

Questo è strano. Sembra che il trasporto HTTP debba essere honor url-encoded credentials.

In ogni caso, potrebbe essere migliore e più sicuro impostare il telecomando per ottenere le credenziali da altrove. Il codice clone è un buon esempio di come eseguire questa operazione: here's come impostare la richiamata e here's un esempio di come generare l'oggetto credenziale.

+0

Questi collegamenti sembrano utili se si ha a che fare con lib2git direttamente, sfortunatamente, sto usando l'interfaccia TFS e le build predefinite. Grazie per i collegamenti però. –

+0

Ah, scusa, non sono un esperto TFS. In bocca al lupo! –

+0

Grazie comunque per la risposta. Potremmo aver identificato che il nostro setup di github enterprise potrebbe essere il problema. –

2

Libgit2 supporta le credenziali dell'URL, tuttavia le attività di build TFS per GitPull annullano il comportamento predefinito con una classe Microsoft.TeamFoundation.Build.Activities.Git.TfsSmartSubtransport per il protocollo http e https.

Questa classe sfortunatamente ignora le credenziali nell'URL e tenta invece di recuperare le credenziali dal registro.

Sono riuscito a ottenere un server di build TFS per estrarre il codice sorgente da un server gitlab utilizzando la generazione TFS con il flusso di lavoro GitTemplate.12.xaml predefinito.

Imposta l'URL del repository della build TFS senza credenziali nell'URL.

Crittografato la password delle credenziali con il seguente bit di codice. Questo deve essere eseguito sul server di build poiché il processo di crittografia è specifico per il computer locale su cui è stato eseguito.

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

Aggiungere le seguenti impostazioni del Registro di sistema al server di compilazione.

NOTA: l'URL nel registro deve corrispondere esattamente all'URL assoluto del repository o TFS non trova le credenziali.

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

Le uniche altre alternative a questo approccio che mi veniva in mente è quello di modificare il flusso di lavoro predefinito e sostituire l'attività GitPull con qualcos'altro.

Non sto suggerendo che questo sia il metodo migliore, ma ha funzionato per me.

+0

Grazie per questo, lo verificherò non appena avrò la possibilità, questo potrebbe essere il lavoro che mi serviva. –