从Jenkins运行mkdir命令时,访问被拒绝



我正在尝试创建一个新目录并将文件复制到其中。所以我使用了一个"执行批处理命令"的作业。

首先我尝试运行:robocopy source destination /e
然后我尝试了:mkdir destination。在这两种情况下,我都得到了"访问被拒绝"的消息。

如果我自己手动尝试,我可以创建一个目录并将文件复制到其中。
目标是远程计算机的共享文件夹:\computerName\sharedFolder\

有人知道如何获得詹金斯的访问权限吗?

我知道这篇文章有点过时了,但我发现了两个运行良好的解决方案,所以我会发布它,以备有人需要。

第一:允许当前运行的磁盘使用率在"执行批处理命令"上,您可以添加一行:

net use \serverfolder /USER:domainuser password

然后,您可以在命令中使用\server\文件夹,它就会工作。詹金斯甚至可以处理凭证,这样就不会出现纯文本了。

第二个解决方案是以特定用户身份启动Jenkins,这样所有命令都将以该用户身份运行。为此:

  1. 在windows中打开服务应用程序
  2. 搜索Jenkins
  3. 右键单击,属性
  4. 在"登录"选项卡上配置要使用的凭据
  5. 重新启动Jenkins

我希望这能帮助

要找到运行作业的用户,请在Jenkins中创建一个"scratch"作业。给它一个单独的"执行Windows批处理命令"构建步骤,并输入"set"作为批处理命令的文本。如果受影响的作业运行在Windows从属服务器上,请确保此作业运行在同一从属服务器上。运行作业。您的控制台将显示该作业已知的环境变量列表,就像您在桌面上的命令提示符窗口中键入"set"一样。不同的是,在底部附近,命令窗口中显示的"USERDOMAIN"one_answers"username"的用户名将是您(您登录的用户);在控制台输出中,它将是运行Jenkins作业的用户帐户。

该用户实际上可能没有登录权限。而且,如果Jenkins是作为服务运行的,你不能只在命令窗口中设置共享:Jenkins作业在不同的Windows"会话"下运行,该会话将看不到你在登录会话中创建的共享。

让你度过难关的一个不太安全的方法是在你的工作中添加用户名(字符串参数)和密码(密码参数)的参数。在您需要访问驱动器之前,无论是在同一生成步骤中,还是在该生成步骤之前运行的"执行Windows批处理命令"步骤中,请运行"@net use:\computername\sharename%%/USER:%%/persistent:no"。(例如:"@net use p:\COMPUTER\SHARE%PASSWORD%%USER%/persistent:no")。"@"将阻止密码显示在日志中。(但是,如果启用了"允许重建",密码将与作业关联,并将在Jenkins中编码。)请确保完成清理("网络使用/删除"),并且在尝试连接之前可能需要测试和清理驱动器号,以防前一个作业在未释放驱动器号的情况下失败。

在这种情况下,您必须为运行作业时可以访问共享的用户输入用户名和密码。您可以使用预先填写的值对隐藏参数进行编码,但这意味着用户的用户名和密码已编码到作业定义中,并且隐藏密码参数的默认值不会在Jenkins配置文件中加密。

肯定有更安全的方法可以在Jenkins服务会话中启用驱动器共享,但根据您的环境,这可能"足够好",可以让您克服目前面临的障碍。我在一个我不是詹金斯管理员的环境中使用过这样的技巧,我对詹金斯奴隶的访问权限非常有限(没有管理权限)。

在我的设置中,Jenkins从属服务在特定用户(名为Jenkins)下运行
它可以方便地验证特定用户的访问权限
当然jenkins需要对物理磁盘和共享上的远程文件夹具有写访问权限。

最新更新