如何在TeamCity中将"\\company\network\share\"用作NuGet源?

4
我已经检查过TeamCity用户可以访问所涉及的网络共享。公共NuGet feed的所有软件包都能够正确找到,而位于网络共享上的软件包却找不到。
我们在使用Visual Studio时通过相同的路径无障碍地访问了该网络共享。
我已尝试使用"file://ratchet/NuGetRepository"但结果没有改变。
以下是TeamCity日志条目和构建步骤配置的截图:
NuGet command: E:\BuildAgent01\plugins\nuget-agent\bin\JetBrains.TeamCity.NuGetRunner.exe E:\BuildAgent01\tools\NuGet.CommandLine.DEFAULT.nupkg\tools\NuGet.exe restore E:\BuildAgent01\work\95323b7041b60513\MySolution.sln -Source https://nuget.org/api/v2/ -Source \\ratchet\NuGetRepository\

NuGet installer build step configuration.

3个回答

1
我能够通过指定网络共享的完全限定名称来解决这个问题,例如\\ratchet.hq.local\NuGetRepository

1
由于被接受的答案没有提供适用于我的设置的解决方案,我想发布一下允许TeamCity访问我的网络共享的方法。
首先,非常重要的一点是:TeamCity Build Agent可以作为Windows服务运行,也可以直接在命令提示符中运行。对于我的机器,这产生了以下后果:
1. 当作为Windows服务运行时,构建代理以LocalSystem身份登录。对于我们的网络共享,我的机器凭据未被授予权限。 注:虽然this SO thread指出可以配置网络共享以允许机器的LocalSystem帐户具有权限,但这对我来说不是一个选项。
2. 当在命令提示符中运行时,构建代理将使用运行它的用户的安全上下文(对我来说,是我的域用户)。同样,对于我们的网络共享,所有域用户都被授予权限。
快速解决方案是简单地在命令提示符中运行构建代理并结束;然而,我确实想将构建代理作为Windows服务运行,因为我认为这是一种更干净的方法。
以下是我的解决方案:
首先,我需要授予我的域用户作为服务登录的特权。这是为了使用我的域用户的安全上下文运行服务所需的。我在本地安全策略中导航到用户权限分配

控制面板 -> 管理工具 -> 本地安全策略 -> 本地策略 -> 用户权限分配

接下来,我将我的域用户添加到作为服务登录设置中。为此,我确保在我的用户名中包括了域。

enter image description here

现在我的域用户的安全上下文可以在启动服务时使用,我导航到服务(services.msc),找到TeamCity Build Agent,并编辑其属性:

enter image description here

现在,重新启动TeamCity Build Agent Windows服务时,它将能够访问网络共享,因为它使用了我的域用户的安全上下文。我现在可以访问我们共享驱动器上的Nuget存储库,并保持后台运行构建代理。

0

您可以在NuGet.targets文件中包含软件包源代码。只需找到注释行并添加您的路径即可。

<PackageSource Include="https://nuget.org/api/v2/" />
<PackageSource Include="\\ratchet\NuGetRepository\" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接