场景如下:
我已经将TeamCity设置为使用运行Windows Server 2012 R2的AWS EC2主机作为构建代理。在此配置中,TeamCity代理服务作为SYSTEM运行。我正试图实现FastBuild作为我们的新编译过程。为了使用FastBuild的分布式编译功能,构建代理主机需要访问共享的网络文件夹。不幸的是,我似乎不能给予这种从一台机器到另一台机器的访问权限。
为了帮助进一步解释,我将使用命名示例。联网文件夹C:Shared-Folder位于一台名为Central-Host的主机上。构建代理驻留在Builder-Host上。所有东西都在EC2主机上运行Windows Server 2012 R2,这些主机通过AWS安全组相互之间完全具有网络权限。我需要的是从Central-Host共享一个目录,这样Builder-Host就可以通过这样的目录结构完全访问它:
\Central-HostShared-Folder
通过使用默认管理员帐户RDPing到两台主机,我可以很容易地设置网络共享和浏览(在Builder-Host上)到\Central-HostShared-Folder位置。我也可以打开命令行并运行:
type NUL > \Central-HostShared-FolderEmpty.txt
,结果是在该网络位置创建了一个空文本文件。
问题来自SYSTEM帐户。当我抓取PSTOOLS并使用命令:
PSEXEC -i -s cmd.exe
我可以测试由TeamCity给出的命令。同样,它是作为SYSTEM运行的服务,我需要强调的是,由于我们在用户帐户类型下使用TeamCity代理时遇到的其他问题,不能更改为正常的用户。
经过多次搜索,我发现了如何设置活动目录服务,以便我可以从域中添加用户和计算机,但在这样做之后,我仍然面临访问拒绝错误。我可能错过了一些重要的东西,我希望这里有人可以帮助。我相信当我能够成功运行上面显示的"type NUL"命令时,这个问题将被认为"解决"。
这不是权限问题的答案,而是一种避免权限问题的方法。(想添加这个作为评论,但StackOverflow不会让我-奇怪。)
共享网络驱动器仅用于发现远程工作者。如果你有一个固定的工作器列表,而不是使用工作器发现,你可以在配置文件中显式地指定它们,如下所示:
Settings
{
.Workers =
{
'hostname1' // specify hostname
'hostname2'
'192.168.0.10' // or ip
}
... // the other stuff that goes here
此功能没有文档记录,因为到目前为止所有用户都希望自动发现工作人员。但是,使用它是可以的,如果它确实有用,则只需更新文档即可将其提升为受支持的特性。