gpt4 book ai didi

tfs - 如何在 TFS Build 中使用私有(private)存储库配置 libgit2?

转载 作者:行者123 更新时间:2023-12-04 12:41:30 29 4
gpt4 key购买 nike

我目前正在使用 TFS 2013(本地安装)尝试使用 LDAP 身份验证从内部 GitHub Enterprise 安装构建。

我遇到的问题是它无法访问源代码,如何配置 TFS Build 以使用特定的身份验证?

从 TFS 构建日志

Exception Message: An error was raised by libgit2. Category = Net (Error).

VS30063: You are not authorized to access https://user:password@githubrepository.corp.company.net. (type LibGit2SharpException)

Exception Data Dictionary:

libgit2.code = -1

libgit2.category = 11

Exception Stack Trace:

Server stack trace:

at LibGit2Sharp.Core.Ensure.HandleError(Int32 result) at LibGit2Sharp.Core.Proxy.git_clone(String url, String workdir, GitCloneOptions opts) at LibGit2Sharp.Repository.Clone(String sourceUrl, String workdirPath, Boolean bare, Boolean checkout, TransferProgressHandler onTransferProgress, CheckoutProgressHandler onCheckoutProgress, Credentials credentials) at Microsoft.TeamFoundation.Build.Activities.Git.GitPull.GitClone.GetRepository(String repositoryUrl, String workingFolder) at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs) at System.Runtime.Remoting.Messaging.StackBuilderSink.AsyncProcessMessage(IMessage msg, IMessageSink replySink)

Exception rethrown at [0]:

at System.Runtime.Remoting.Proxies.RealProxy.EndInvokeHelper(Message reqMsg, Boolean bProxyCase) at System.Runtime.Remoting.Proxies.RemotingProxy.Invoke(Object NotUsed, MessageData& msgData) at System.Func3.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 context, IAsyncResult result) at System.Activities.AsyncCodeActivity.CompleteAsyncCodeActivityData.CompleteAsyncCodeActivityWorkItem.Execute(ActivityExecutor executor, BookmarkManager bookmarkManager)



跟进

我已经尝试了用于身份验证的 URL 参数(示例)

https://username:password@domain.com/user/project.git



更多关注

完全卸载并更新到 2013 RC,错误消息也已更新,因为它不同。

我还尝试将构建 Controller 设置为在 github 企业安装中作为经过身份验证的 LDAP 用户运行。

最佳答案

Libgit2 确实支持 url 凭据,但是 GitPull 的 TFS 构建事件使用 http 和 https 协议(protocol)的 Microsoft.TeamFoundation.Build.Activities.Git.TfsSmartSubtransport 类覆盖了默认行为。

不幸的是,此类忽略 URL 中的凭据,而是尝试从注册表中检索凭据。

我能够使用 TFS 构建和默认的 GitTemplate.12.xaml 工作流成功地获得 TFS 构建服务器以从 gitlab 服务器中提取源代码。

设置 TFS 构建的存储库 URL,而不在 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 事件。

我并不是说这是最好的方法,但它对我有用。

关于tfs - 如何在 TFS Build 中使用私有(private)存储库配置 libgit2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18150622/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com