在 Github Action 中调试“错误:进程已完成,退出代码为 127”

问题描述 投票:0回答:1

我们有一个相当大的 C++ 项目,我们正在从 QT5.15.2 迁移到 QT6.5.3,在此过程中,我们的一些测试开始失败。 我们正在多个平台(Linux、MacOS 和 Windows)上进行构建,因此使用不同的托管运行器。

在 Linux 和 Mac 上,构建和测试像以前一样工作,但在 Windows 上,一些测试开始失败。我们从 GitHub 收到的唯一错误是“错误:进程已完成,退出代码为 127”。根据我的发现,这可能表明文件丢失。此时我已经尝试了几乎所有方法来确定可能是什么文件,但到目前为止还没有运气。

这是我们用于测试的步骤

jobs:
  build-and-test:
    strategy:
      matrix:
        os: ["windows", "linux", "macos"]
        include:
          - os: windows
            runner: 07.04.05-windows-2022-16core
          - os: linux
            runner: 07.04.05-ubuntu-20.04-8core
          - os: macos
            runner: macos-12-large
      fail-fast: true
    runs-on: ${{matrix.runner}}
    env:
      build_type: RelWithDebInfo

  - name: Run cmake
    if: steps.prepare-env.outputs.shouldbuild == 1
    env:
      GITLAB_PAT: ${{ secrets.GITLAB_PAT }}
    run: >
      cd build &&
      cmake .. ${{steps.prepare-env.outputs.buildflags}} -DCMAKE_BUILD_TYPE=${{env.build_type}} -DBUILD_NUMBER="Build GI-${{github.run_number}}" -DTEST_REPORT=1
      
  - name: Set permissions on test
    if: matrix.os == 'windows' && steps.prepare-env.outputs.shouldbuild == 1
    env:
      ACTIONS_STEP_DEBUG: true
      QT_WIN_DEBUG_CONSOLE: attach
    shell: bash
    run: >
      cd build &&
      cmake --build . --config ${{env.build_type}} -j ${{steps.prepare-env.outputs.cores}} --target MyTest &&
      cd Bin &&
      dir &&
      chmod +x "C:\a\projectName\build\Bin\MyTest.exe" 

  - name: Run test manually
    if: matrix.os == 'windows' && steps.prepare-env.outputs.shouldbuild == 1
    env:
      ACTIONS_STEP_DEBUG: true
      QT_WIN_DEBUG_CONSOLE: attach
    shell: bash
    run: >
      cd build &&
      "C:\a\projectName\build\Bin\MyTest.exe"

我尝试在构建之前运行测试,在这种情况下我也得到 127,但带有解释性“C:\projectname uild\Bin\MyTest.exe:没有这样的文件或目录”

我尝试在可用的 Windows 服务器上手动运行失败的测试(通过获取 dir 命令显示的 bin 文件夹中可用的文件),并且执行时没有出现任何问题。

失败的测试和正常的测试之间的区别在于,失败的测试使用的是我们自己构建的自定义库,但构建过程没有改变,只是 QT 版本改变了。我已经验证我们依赖的新 QT 模块存在于构建服务器上的 bin 文件夹中。

在理想的世界中,我会登录到构建服务器并从构建输出手动运行测试以获取一些信息,但我们遇到了这个相当无用的 127 错误。

关于如何调试此 127 错误有什么好主意吗?

qt github-actions
1个回答
1
投票

所以错误的原因是我们使用的是针对 QT5 构建的 Sentry 库。当我绕过测试以进行发布时,我能够在自己的计算机上尝试该应用程序,然后向我显示一个弹出窗口,其中包含缺少的 dll (QT5)。 通过使用依赖项工具进行一些挖掘,我找到了罪魁祸首。

我仍然不明白,为什么 GitHub 除了 127 之外不能给出有用的答案,但至少现在我可以继续前进。

© www.soinside.com 2019 - 2024. All rights reserved.