【问题标题】:Jenkins can't find file on the slave/agent?詹金斯在奴隶/代理上找不到文件?
【发布时间】:2019-09-03 11:18:16
【问题描述】:

我已将我们的 Jenkins 设置从在一台机器上运行的所有内容更改为主代理/从设置。在此之前一切正常,现在我遇到了一些我调用的程序无法找到访问文件的问题。

案例 1:
(请不要问为什么这么复杂,但是文件结构给了我也改不了)
我正在调用一个 python 脚本,它自己调用一个批处理文件

filepath= os.path.abspath(os.path.join(pamFolder, "run.bat"))
p = subprocess.Popen(filepath, cwd=pamFolder, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

...批处理文件又是一个带有实际程序的jar文件

java -XX:-UseGCOverheadLimit -cp "../..;../../libs/*" -jar ..\..\myjarfile.jar

在 jar 文件中,可以访问磁盘上的文件失败,并显示找不到文件的错误消息:

ERR : The file was not found in the specified path 'U:\somefile.txt'. Please check this path for access and your configuration!

案例 2:
我正在从 Jenkins 调用一个批处理文件,该文件正在调用其他一些 exe,最后试图通过 COM 接口在 Excel 中打开一个文件。在这里,我收到以下异常(Excel 无法访问该文件):

Unhandled Exception: System.Runtime.InteropServices.COMException: Microsoft Excel kann auf die Datei 'D:\Jenkins\workspace\myJob\someDir\someFile.xlsm' nicht zugreifen.

问题
如前所述,这两个作业都在以前的设置中工作。两个文件都存在。
我怀疑 Jenkins / 程序正试图在 master 上找到它们不可用的文件。

有什么方法可以告诉 Jenkins 被调用的工具在从节点上完全执行,或者以其他方式告诉他们在哪里可以找到这些文件?

编辑
该作业已在从属设备上运行。控制台显示 Running on [slave name] in D:/Jenkins/workspace/xxxxx。
主服务器的配置方式是只有分配给它的作业在主服务器上运行。所以几乎所有的作业都应该在从属服务器上运行。

EDIT2 / 解决方案
原来这两个问题是由不同的事情引起的。
案例 1:通过使用 UNC 路径解决了这个问题
案例2:通过提供here 所述的必要权限和使用具有管理员权限的用户启动从属服务的混合解决方案。

【问题讨论】:

    标签: jenkins jenkins-pipeline jenkins-groovy


    【解决方案1】:

    根据我对这个问题的经验,通常它与您的 SCM 设置有关。

    但是正如您所说的文件确实存在,我认为 U:\ 可能是网络共享?然后考虑将路径更改为使用 UNC 路径。

    如果不是这种情况,请检查您的詹金斯奴隶是否有足够的用户权限来访问所述文件。

    【讨论】:

    • U 实际上是一个网络共享。我可以尝试使用 UNC,但是,如果文件 2 位于本地驱动器上,但它仍然无法正常工作。而且:它在更改为主从之前确实有效......
    • 那么可能和用户权限有关。您可以按照这些步骤here 将您的从站设置为服务。然后打开服务,找到你设置的服务并修改它的属性。在登录选项卡下,选择此帐户并输入您要使用的管理帐户的凭据。
    • 原来这两个问题是由不同的东西引起的。使用 UNC 路径确实有效,谢谢!
    • 太棒了!很高兴我能帮上忙。请考虑将您的问题标记为已回答:)
    【解决方案2】:

    你可以告诉 Jenkins 在指定的 slave 上运行作业,如下所示:

    1. Nodes > [SLAVE] > 配置下,为从站指定标签。

    1. [工作] > 配置 > 限制此项目的运行位置下,输入标签。

    现在,当您构建时,作业的控制台输出应该会按照 Running on [SLAVE] (build_agent_01) in C:/jenkins 的行正确读取,并且文件必须是可访问的。

    【讨论】:

    • 已经在slave上运行了,我会在上面加上这个信息。控制台显示Running on xxxxx in D:/Jenkins/workspace/xxxxx。 master 的配置方式是只有分配给它的作业在 master 上运行。所以几乎所有的工作都应该在从属设备上运行
    • 在这种情况下,你可能想试试这个:stackoverflow.com/a/55760910/8895640
    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2021-05-31
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2018-10-19
    相关资源
    最近更新 更多