我将Jenkins设置从一台机器上运行的所有内容更改为主代理/从属设置。在此之前一切正常,现在我面临的问题是我正在调用的某些程序无法访问文件。
案例1:
(请不要问为什么它这么复杂,但是给出了文件结构,我无法更改)
我正在调用python脚本,即iself会调用批处理文件
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:
我正在从詹金斯调用一个批处理文件,该批处理文件正在调用其他一些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)/程序试图在主文件上查找不可用的文件。
有什么办法告诉詹金斯,被调用的工具在从属节点上完全执行,还是以其他方式告诉他们在哪里可以找到这些文件?
编辑
该作业已在从属服务器上运行。控制台在D:/ Jenkins / workspace / xxxxx中以[从属名称]运行。
对主服务器进行配置时,只有分配给它的作业才能在主服务器上运行。因此,几乎所有作业都应在从属服务器上运行。
EDIT2 /解决方案
原来,这两个问题是由不同的原因引起的。
情况1:使用UNC路径解决了此问题
情况2:解决了以下两种情况:提供here中所述的必要权限,然后以具有管理员权限的用户启动从属服务。
答案 0 :(得分:1)
根据我在此问题上的经验,通常与您的SCM设置有关。
但是正如您所说的文件确实存在,我认为U:\是网络共享吗?然后考虑更改您的路径以使用UNC路径。
如果不是这种情况,请检查您的jenkins奴隶是否具有足够的用户权限来访问该文件。
答案 1 :(得分:0)