2

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

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

本地部署工作正常。

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

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

手动尝试远程复制时,效果很好。我可以创建目录并写入它。当然是在同一台机器上。

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

有什么提示或建议吗?谢谢!

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

解决方案

我找到了解决方案。您必须授予域中计算机的访问权限,而不是该计算机的用户。如果你回头看,这似乎很合乎逻辑。

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

4

2 回答 2

1

如果您没有域,则以下内容肯定会起作用。即使您有域,这也应该有效。

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

解决方案步骤:
在 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

于 2012-11-03T02:37:22.080 回答
0

确保您的“本地系统帐户”具有远程目录的访问权限(包括写入权限)。然后使用符号

\\targetdirectory

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

于 2012-01-05T09:50:12.173 回答