【问题标题】:Jenkins | "The system cannot find the file specified"詹金斯 | “该系统找不到指定的文件”
【发布时间】:2021-10-07 15:13:35
【问题描述】:

我正在使用 Jenkins 来安排我的 selenium/java 自动化测试(打包到 .jar 文件中的测试脚本)。

我创建了一个.bat 文件来触发.jar 文件,我正在从Jenkins 调用.bat 文件。

当我手动触发测试时,双击.bat 文件,一切运行顺利。但是当我尝试通过 Jenkins 运行相同的测试时,每个测试用例都会出现以下错误:

“系统找不到指定的文件”

Jenkins 正在成功调用 .bat 文件,因为我可以看到 jenkins 控制台上显示的测试用例名称(存在于 .jar 文件中)。

在我的 java 代码中,我使用.\ 来表示我的 jar 文件所在的“当前目录”以及一个数据驱动自动化框架的 excel 文件。甚至 .bat 文件也存在于同一位置,并且我在 .bat 文件和 jenkins 上都给出了完全限定的路径。

我不能硬编码,必须在我的 java 代码中使用./。我在 Windows Server(不是我的本地机器)上运行它。

【问题讨论】:

  • 也许this 会有所帮助。
  • 手动运行时从哪个目录运行?在运行 .bat 文件之前,您是否尝试过让 Jenkins 更改到同一个目录?我的猜测是这是与您的 .bat.jar 文件以外的其他文件有关的工作目录问题。
  • @mrfreester - 我从 C:/Desktop/QA 目录手动运行它。在 jenkins 中,在配置构建操作下,我选择了“windows bat 文件”并给出了完整路径 - C: /Desktop/QA/trigger.bat 另外,在 bat 文件中,我将 PATH 和 CLASSPATH 值分别设置为 C:/ProgramFiles/java/jdk1.7 和 C:/Desktop/QA 目录。
  • @ShreyasSG 尝试使用Execute Windows Batch Command 代替您的构建步骤。在第一行,输入cd C:/Desktop/QA/。在您的第二行尝试trigger.batC:\Desktop\QA\trigger.bat。否则,您可能必须弄清楚您的脚本中试图使用工作目录的内容。如果可行,我会把它作为答案,让我知道:)
  • 还有一点需要考虑,你对 Jenkins 盒子的所有依赖吗?您引用的所有 Web 驱动程序或其他文件?您看到的cannot find the file 错误中是否有更多详细信息?

标签: java windows selenium batch-file jenkins


【解决方案1】:

确定 .bat 文件所在的当前目录路径并将附加/添加到系统路径变量。完成后,让 jenkin 执行 .bat 文件。

【讨论】:

  • 在哪里可以找到路径变量?在詹金斯?在 bat 文件中,我将 PATH 和 CLASSPATH 值分别设置为 C:/ProgramFiles/java/jdk1.7 和 C:/Desktop/QA 目录。 C:/Desktop/QA 有我所有的文件,bat、jar、excel...
【解决方案2】:

这是您在 Jenkins 上运行时工作目录不同的问题。

最简单的修复: 为您的构建步骤执行 Windows 批处理命令。在第一行,输入cd C:/Desktop/QA/ 以更改您的工作目录以匹配您在本地执行的操作。在您的第二行使用trigger.batC:\Desktop\QA\trigger.bat

更强大的修复: 在您的 java 代码中,您在引用其他文件时使用.\。这基本上意味着当前目录,如果您在不同的工作目录中,这将不是您想要的。相反,您可以look at this question/answer 显示如何引用您的.jar 文件所在的目录而不是工作目录。总而言之,这样做:

return new File(MyClass.class.getProtectionDomain().getCodeSource()
    .getLocation().toURI().getPath());

【讨论】:

  • 感谢您的帮助@mrfreester。我遵循了其他一些对我有用的替代方案。
【解决方案3】:

问题在于 Jenkins 的安装。一位开发运维工程师为我解决了这个问题。必须在其中安装 Tomcat 和 jenkins。他说“如果 Jenkins 作为 UI 安装,它无法打开另一个 UI。因此我们应该在单独的服务器上安装 .war 文件,为 jenkins 创建单独的 UI,并且我的应用程序 UI(firefox)可以在本地启动” .

【讨论】:

    【解决方案4】:

    似乎在删除文件/文件夹或将文件复制到远程服务器时可能会出现以下错误消息:

    Caused: java.io.IOException: Cannot run program "nohup" (in directory "C:\Windows\system32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\Test_ssh_Remove"): CreateProcess error=2, The system cannot find the file specified
    java.io.IOException: CreateProcess error=2, The system cannot find the file specified
    

    要解决此问题,您必须在源和目标中提供相对路径而不是绝对路径,如下所示。例如这里是Windows机器(远程服务器)上C:驱动器内的“Program Files”文件夹。

    示例:

    dir('VueAPP') { // Go to Your Current Directory where build code present to copy at Remote server 
    
       sshRemove remote: remote, path: "/Program Files/Apache24/htdocs/dist"
    
       sshPut remote: remote, from: 'dist', into: '/Program Files/Apache24/htdocs/'
    
       sshPut remote: remote, from: 'index.html', into: '/Program Files/Apache24/htdocs/'
    
    }
    

    【讨论】:

      【解决方案5】:

      对我来说,我更新的 java "C:\Program Files\Java\jdk1.8.0_301/bin/java" 的路径中有一个额外的空间,它工作正常。 管理 Jenkins -> 全局工具配置 -> JDK

      【讨论】:

        猜你喜欢
        • 2020-12-29
        • 2013-12-26
        • 1970-01-01
        • 2012-09-30
        • 2014-07-24
        • 2018-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多