如何在 TeamCity 中使用“\\company\network\share\”作为 NuGet 源?
How do I use "\\company\network\share\" as a NuGet source in TeamCity?
我已检查 TeamCity 用户是否有权访问相关网络共享。
来自 public 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\work323b7041b60513\MySolution.sln -Source https://nuget.org/api/v2/ -Source \ratchet\NuGetRepository\
您可以在 NuGet.targets 文件中包含包源。只需找到注释行并添加您的路径。
<PackageSource Include="https://nuget.org/api/v2/" />
<PackageSource Include="\ratchet\NuGetRepository\" />
能够通过指定网络共享的完全限定名称来解决此问题,例如\ratchet.hq.local\NuGetRepository
.
由于已接受的答案没有为我的设置提供解决方案,我想post 做了什么 允许 TeamCity 访问我的网络共享。
首先,一个非常重要的注意事项:TeamCity Build Agent 可以 运行 作为 Windows 服务或直接在命令提示符中。对于我的机器,这会产生以下后果:
- 当 运行 作为 Windows 服务时,构建代理以
LocalSystem
身份登录。对于我们的网络共享,我的计算机的凭据未获得权限。
注意:虽然 this SO thread 表示可以配置网络共享以允许计算机的 LocalSystem
帐户拥有权限,但这对我来说不是一个选项。
- 当在命令提示符中 运行 时,构建代理将使用 运行 提供它的任何人的安全上下文(对我来说,它是我的域用户)。同样,对于我们的网络共享,所有域用户 都被授予 权限。
快速解决方案是简单地 运行 命令提示符中的构建代理,然后收工;但是,我确实希望 运行 将构建代理作为 Windows 服务,因为我认为这是一种更简洁的方法。
这是我的解决方案:
首先,我需要授予我的域用户作为服务登录的权限。这是 运行 服务与我的域用户的安全上下文所必需的。我导航到本地安全策略中的用户权限分配:
Control Panel -> Administrative Tools -> Local Security Policy -> Local Policies -> User Rights Assignment
接下来,我将我的域用户添加到 Log on as a servcie 设置中。为此,我确保将域包含在我的用户名中。
既然我的域用户的安全上下文可以在启动服务时使用,我导航到服务 (services.msc),找到 TeamCity Build Agent,并编辑其属性:
现在,当重新启动 TeamCity Build Agent Windows 服务时,它将能够访问网络共享,因为它正在使用我的域用户的安全上下文。我现在可以访问共享驱动器上的 Nuget 存储库,并在后台保留生成代理 运行ning。
我已检查 TeamCity 用户是否有权访问相关网络共享。
来自 public 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\work323b7041b60513\MySolution.sln -Source https://nuget.org/api/v2/ -Source \ratchet\NuGetRepository\
您可以在 NuGet.targets 文件中包含包源。只需找到注释行并添加您的路径。
<PackageSource Include="https://nuget.org/api/v2/" />
<PackageSource Include="\ratchet\NuGetRepository\" />
能够通过指定网络共享的完全限定名称来解决此问题,例如\ratchet.hq.local\NuGetRepository
.
由于已接受的答案没有为我的设置提供解决方案,我想post 做了什么 允许 TeamCity 访问我的网络共享。
首先,一个非常重要的注意事项:TeamCity Build Agent 可以 运行 作为 Windows 服务或直接在命令提示符中。对于我的机器,这会产生以下后果:
- 当 运行 作为 Windows 服务时,构建代理以
LocalSystem
身份登录。对于我们的网络共享,我的计算机的凭据未获得权限。
注意:虽然 this SO thread 表示可以配置网络共享以允许计算机的LocalSystem
帐户拥有权限,但这对我来说不是一个选项。 - 当在命令提示符中 运行 时,构建代理将使用 运行 提供它的任何人的安全上下文(对我来说,它是我的域用户)。同样,对于我们的网络共享,所有域用户 都被授予 权限。
快速解决方案是简单地 运行 命令提示符中的构建代理,然后收工;但是,我确实希望 运行 将构建代理作为 Windows 服务,因为我认为这是一种更简洁的方法。
这是我的解决方案:
首先,我需要授予我的域用户作为服务登录的权限。这是 运行 服务与我的域用户的安全上下文所必需的。我导航到本地安全策略中的用户权限分配:
Control Panel -> Administrative Tools -> Local Security Policy -> Local Policies -> User Rights Assignment
接下来,我将我的域用户添加到 Log on as a servcie 设置中。为此,我确保将域包含在我的用户名中。
既然我的域用户的安全上下文可以在启动服务时使用,我导航到服务 (services.msc),找到 TeamCity Build Agent,并编辑其属性:
现在,当重新启动 TeamCity Build Agent Windows 服务时,它将能够访问网络共享,因为它正在使用我的域用户的安全上下文。我现在可以访问共享驱动器上的 Nuget 存储库,并在后台保留生成代理 运行ning。