詹金斯 - 远程访问被拒绝

时间:2011-12-21 10:13:40

标签: jenkins smb

我正在使用ArtifactDeployer插件将构建作业工件部署到远程位置(Windows共享SMB)。 然而詹金斯从未成功。抛出错误,如:

  

[ArtifactDeployer] - 从动作后开始部署......   [ArtifactDeployer] - [错误] - 无法部署。无法创建目录...构建步骤   [ArtifactDeployer] - 将工件从工作区部署到远程目录,将构建结果更改为FAILURE

本地部署工作正常。

Jenkins机器操作系统是Windows 7 32位教授。 Jenkins使用本地系统帐户作为服务运行。

我尝试使用其他帐户,我的用户帐户但服务无法启动(Windows错误1069:由于登录失败,服务未启动)。 网络服务帐户确实运行但是Jenkins抛出错误它无法访问.NET框架。

手动尝试远程复制时,这样可以正常工作。我可以创建目录并写入它。当然在同一台机器上。

我在Jenkins中尝试了两种不同的远程引用: 1)\\ targetdirectory 2)I:\ - 通过在Windows中将驱动器号映射到远程目录 没有成功......

任何提示或建议?谢谢!

2012年2月15日更新: 仍然没有针对此问题的解决方案或解决方法。 它不仅是插件,我还使用“执行Windows批处理命令”来解决此问题。 我发现了一个我要分享的错误report

解决方案

我找到了solution。您必须向域中的计算机而不是该计算机的用户授予访问权限。如果你回头看它,似乎是非常逻辑的。

第二种解决方案是使用域用户帐户运行服务。上面我使用本地用户.\user代替DOMAIN\user

犯了一个错误

2 个答案:

答案 0 :(得分:1)

如果您没有域名,以下内容肯定会有效。即使您有域名,此也应该

背景资料
您需要将映射的驱动器映射到服务正在使用的同一帐户并在适当的时间可用。通常映射的驱动器仅在登录时映射到登录用户。服务用户上下文本身不会“登录” - 例如,如果我将驱动器映射为MyUser并且服务运行为MyUser,在我通过输入密码登录之前,驱动器将无法使用。但是,我们可以使用脚本为特定用户的启动(而不是登录)映射驱动器。 Jenkins通常作为本地系统帐户运行,因此如果您不想更改它,则需要以SYSTEM用户身份运行下面的脚本。如果您不希望将此映射驱动器授予以SYSTEM运行的所有服务/进程,则可以为Jenkins创建特定用户,并以该用户身份运行下面的服务和脚本(这可能可能更安全)。

解决方案步骤:
在ArtifactDeployer中,您希望部署到映射的网络驱动器。在我的例子中,这是S:。

远程共享的权限没有特殊设置。 (在我的例子中,Windows Server 2008共享的用户名和密码用于映射驱动器。)

将批处理文件MapDrives.bat写入您所选用户(默认:SYSTEM)有权访问的位置,其中包含以下内容:

net use S: "\\server_name\share_name" /persistent:yes password_here /USER:username_here

请注意,我正在该行中映射到S:。

通过任务计划程序,创建一个作为与服务相同的用户运行的任务(默认值:SYSTEM),触发At Startup,并按照其操作运行批处理文件MapDrives.bat

重新启动它应该可以工作!


<强>引用:
经过许多页面和许多测试后,最终在这里找到了最好的建议,并引导我进入上述解决方案 https://stackoverflow.com/a/4763324/150794

答案 1 :(得分:0)

确保您的本地系统帐户&#39;拥有远程目录的访问权限(包括写访问权限)。然后使用符号

\\targetdirectory

将驱动器号映射到远程目录仅适用于您当前使用的用户帐户。任何其他帐户都无法使用驱动器号映射。