如何在TeamCity中使用“\\ company \ network \ share \”作为NuGet源?

时间:2015-09-04 09:40:32

标签: nuget teamcity

我已检查过TeamCity用户是否可以访问相关网络共享。

在网络共享上可用的包不是。

时,可以正确找到来自公共NuGet供稿的所有包

我们在使用完全相同的路径通过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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

由于接受的答案没有为我的设置提供解决方案,因此我想发布所做的允许TeamCity访问我的网络共享。

首先,一个非常重要的注意事项:TeamCity Build Agent可以作为Windows服务运行,也可以直接在命令提示符下运行。对于我的机器,这会产生以下后果:

  1. 作为Windows服务运行时,构建代理以LocalSystem身份登录。对于我们的网络共享,我的机器凭据未获得授权。

    注意:虽然this SO thread表示可以将网络共享配置为允许计算机的LocalSystem帐户获得权限,但这不是我的选择。 < / LI>
  2. 在命令提示符下运行时,构建代理将使用运行它的任何人的安全上下文(对我来说,它是我的域用户)。同样,对于我们的网络共享,所有域用户具有权限。
  3. 快速解决方案是在命令提示符下运行构建代理并将其称为一天;但是,我确实希望将构建代理作为Windows服务运行,因为我认为这是一种更清洁的方法。

    这是我的解决方案:

    首先,我需要授予我的域用户作为服务登录的权限。这需要使用我的域用户的安全上下文来运行服务。我导航到本地安全策略中的用户权限分配

      

    控制面板 - &gt;管理工具 - &gt;本地安全政策 - &gt;本地政策 - &gt;用户权利分配

    接下来,我将我的域用户添加到以servcie身份登录设置。为此,我确保使用我的用户名包含域名。

    enter image description here

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

    enter image description here

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