【发布时间】: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