我正在尝试创建一个新目录并将文件复制到该目录。所以我正在使用“执行批处理命令”的工作。
首先我尝试运行:using (var client = new HttpClient())
using (var response = await client.GetAsync(url))
using (var content = response.Content)
using (var stream = await content.ReadAsStreamAsync())
{
// NOTE passing a stream here, not a string
var directories = ImageMetadataReader.ReadMetadata(stream);
// ...
}
然后我尝试了:robocopy source destination /e
。在这两种情况下,我都获得了“访问被拒绝”的消息。
如果我自己尝试,我可以创建一个目录并将文件复制到其中 目标是远程计算机的共享文件夹:\ computerName \ sharedFolder \
任何人都知道如何获得Jenkins的访问权限?
答案 0 :(得分:1)
在我的设置中,Jenkins slave服务在特定用户(名为 jenkins )下运行。
它可以轻松验证该特定用户的访问权限
当然 jenkins 需要在物理磁盘和共享上的远程文件夹上具有写访问权。
答案 1 :(得分:0)
要查找运行作业的用户,请在Jenkins中创建“临时”作业。为它提供一个“执行Windows批处理命令”构建步骤,并输入“set”作为批处理命令的文本。如果受影响的作业在Windows从属服务器上运行,请确保此作业在同一个从属服务器上运行。运行这份工作。您的控制台将显示该作业已知的环境变量列表,就像您在桌面上的“命令提示符”窗口中键入“set”一样。不同之处在于,在命令窗口中,“USERDOMAIN”和“USERNAME”显示的用户名将是您(您登录的用户);在控制台输出中,它将是您运行Jenkins作业的用户帐户。
该用户实际上可能没有登录权限。而且,如果Jenkins作为服务运行,您不能只在命令窗口中设置共享:Jenkins作业在不同的Windows“会话”下运行,并且该会话将看不到您在登录会话中创建的共享。 / p>
一种非常安全的方法可以让您通过用户名(字符串参数)和密码(密码参数)为作业添加参数。在需要访问驱动器之前,无论是在相同的构建步骤中,还是在构建步骤之前运行的“执行Windows批处理命令”步骤中,运行“@net use:\ computername \ sharename %% / USER:%% /持续性:无”。 (例如:“@ net使用p:\ COMPUTER \ SHARE%PASSWORD %% USER%/ persistent:no”)。 “@”将使密码不会显示在日志中。 (但是,如果启用了“允许重建”,密码将与作业关联,并将在Jenkins中编码。)确保完成后清理(“net use / delete”),您可能需要测试和在尝试连接之前清理驱动器号,以防上一个作业失败而不释放驱动器号。
在这种情况下,您必须为运行作业时可以访问共享的用户输入用户名和密码。您可以使用预填充的这些值对隐藏参数进行编码,但这意味着用户的用户名和密码将编码到作业定义中,并且隐藏密码参数的默认值不会在Jenkins配置文件中加密。
肯定有更安全的方法可以在Jenkins服务会话中启用驱动器共享,但根据您的环境,这可能“足够好”,可以让您超越您现在面临的阻止。我曾经在我不是Jenkins管理员的环境中使用过类似这样的技巧,而且我对Jenkins奴隶的访问权限非常有限(并且没有管理员权限)。
答案 2 :(得分:0)
我知道这篇文章有些陈旧,但是我发现两个解决方案都可以很好地工作,因此我将其发布,以防万一有人需要它。
首先:允许当前运行使用磁盘 在“执行批处理命令”上,您可以添加一行:
net use \\server\folder /USER:domain\user password
然后您可以在命令中使用\ server \ folder,它将起作用。 Jenkins甚至可以处理凭据,以便没有纯文本。
第二解决方案是以特定用户身份启动Jenkins,以便所有命令都将以该用户身份运行。 为此:
我希望这对某人有帮助