2013-08-09 32 views
6

Tôi hiện đang sử dụng TFS 2013 (cài đặt cục bộ) để cố gắng xây dựng từ cài đặt GitHub Enterprise bên trong bằng Xác thực LDAP.Cách định cấu hình libgit2 trong TFS Xây dựng với các kho lưu trữ riêng tư?

Sự cố tôi nhận được là không thể truy cập mã nguồn, làm cách nào tôi có thể định cấu hình TFS Build để sử dụng xác thực cụ thể?

Từ TFS Xây dựng Log

Exception nhắn: Một lỗi đã được nuôi dưỡng bởi libgit2. Danh mục = Net (Lỗi).

VS30063: Bạn không được phép truy cập https://user:[email protected]. (Loại LibGit2SharpException)

ngoại lệ dữ liệu từ điển:

libgit2.code = -1

libgit2.category = 11

Exception Stack Trace:

server stack trace:

tại LibGit2Sharp.Core.Ensure.HandleError (kết quả Int32) tại LibGit2Sharp.Core.Proxy.git_clone (Strin g url, String workdir, GitCloneOptions opts) tại LibGit2Sharp.Repository.Clone (String sourceUrl, String workdirPath, Boolean bare, Boolean checkout, TransferProgressHandler onTransferProgress, CheckoutProgressHandler onCheckoutProgress, Thông tin xác thực) tại Microsoft.TeamFoundation.Build.Activities.Git. GitPull.GitClone.GetRepository (String repositoryUrl, String workingFolder) tại System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage (IntPtr md, Object [] args, Object server, Object [] & outArgs) tại System.Runtime.Remoting .Messaging.StackBuilderSink.AsyncProcessMessage (IMessage msg, IMessageSink replySink)

Ngoại lệ được rethrown tại [0]:

tại System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper (Message reqMsg, Boolean bProxyCase) tại System.Runtime.Remoting.Proxies.RemotingProxy.Invoke (Object NotUsed, MessageData & msgData) tại 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 bối cảnh, kết quả IAsyncResult) tại System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Execute (ActivityExecutor thi hành di chúc, bookmarkManager bookmarkManager)

theo dõi

Tôi đã thử các params URL để xác thực (ví dụ)

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

More Theo dõi

Hoàn toàn gỡ bỏ cài đặt và cập nhật cho 2013 RC, thông báo lỗi đã được cập nhật là tốt, vì nó là khác nhau.

Tôi cũng đã thử thiết lập trình điều khiển xây dựng để chạy như một người dùng LDAP đã được xác thực trong quá trình cài đặt doanh nghiệp github.

Trả lời

0

Thật kỳ quặc. Có vẻ như giao thông HTTP phải là honor url-encoded credentials.

Trong mọi trường hợp, có thể tốt hơn và an toàn hơn để thiết lập điều khiển từ xa để nhận thông tin đăng nhập từ nơi khác. Mã bản sao là một ví dụ tốt về cách thực hiện điều này: here's cách thiết lập gọi lại và here's một ví dụ về cách tạo đối tượng thông tin xác thực.

+0

Các liên kết này có vẻ hữu ích nếu giao dịch trực tiếp với lib2git, thật không may, tôi đang sử dụng giao diện TFS và các bản dựng mặc định. Cảm ơn các liên kết mặc dù. –

+0

Ah, xin lỗi, tôi không có chuyên gia TFS. Chúc may mắn! –

+0

Cảm ơn mọi người đã phản hồi. Chúng tôi có thể đã xác định rằng thiết lập của chúng tôi về doanh nghiệp github có thể là vấn đề. –

2

Libgit2 không hỗ trợ thông tin xác thực url, tuy nhiên hoạt động xây dựng TFS cho GitPull ghi đè hành vi mặc định bằng lớp Microsoft.TeamFoundation.Build.Activities.Git.TfsSmartSubtransport cho giao thức http và https.

Lớp này không may bỏ qua thông tin xác thực trong URL và thay vào đó cố gắng truy xuất bằng chứng xác thực từ sổ đăng ký.

Tôi đã có thể thành công khi nhận được máy chủ xây dựng TFS để lấy mã nguồn từ máy chủ gitlab bằng cách sử dụng TFS build với luồng công việc GitTemplate.12.xaml mặc định.

Thiết lập URL kho lưu trữ của TFS mà không có bất kỳ thông tin đăng nhập nào trong URL.

Đã mã hóa mật khẩu thông tin xác thực của bạn bằng một chút mã sau. Điều này cần phải chạy trên máy chủ xây dựng vì quá trình mã hóa dành riêng cho máy cục bộ được thực hiện trên đó.

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

Thêm cài đặt đăng ký sau vào máy chủ xây dựng của bạn.

LƯU Ý: URL trong sổ đăng ký phải khớp chính xác với URL tuyệt đối của kho lưu trữ của bạn hoặc TFS sẽ không tìm thấy thông tin xác thực.

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

Lựa chọn thay thế khác cho phương pháp này mà tôi có thể nghĩ là sửa đổi quy trình làm việc mặc định và thay thế hoạt động GitPull bằng hoạt động khác.

Tôi không gợi ý rằng đây là phương pháp tốt nhất, nhưng nó có hiệu quả đối với tôi.

+0

Cảm ơn vì điều này, sẽ kiểm tra nó ngay sau khi tôi có cơ hội, đây có thể là công việc xung quanh tôi cần. –

Các vấn đề liên quan