Node.js electron builder在jenkins上失败,原因是:enoint:没有这样的文件或目录,copyfile elevate.exe

Node.js electron builder在jenkins上失败,原因是:enoint:没有这样的文件或目录,copyfile elevate.exe,node.js,jenkins,electron,Node.js,Jenkins,Electron,我开始研究一个旧的基于电子的应用程序。作为这项工作的一部分,我需要更新许多包,包括electron builder 在对所有软件包版本等进行了多次调整之后,我在本地机器上构建了应用程序,即windows 10 当我将构建推送到jenkins,并尝试进行electron构建时,我得到以下错误:enoint:没有这样的文件或目录,copyfile'/root/.cache/electron builder/nsis/nsis-3.0.3.2/elevate.exe'->'/home/jenkins/

我开始研究一个旧的基于电子的应用程序。作为这项工作的一部分,我需要更新许多包,包括electron builder

在对所有软件包版本等进行了多次调整之后,我在本地机器上构建了应用程序,即windows 10

当我将构建推送到jenkins,并尝试进行electron构建时,我得到以下错误:enoint:没有这样的文件或目录,copyfile'/root/.cache/electron builder/nsis/nsis-3.0.3.2/elevate.exe'->'/home/jenkins/workspace/MYAPP\u MYAPP-client\u master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/electron packager/win32-x64/MYAPP-win32-x64/resources/elevate.exe'

我知道这意味着这个文件根本不存在?我不明白这是怎么发生的,因为同一个构建配置是用以前版本的electron builder构建应用程序的,但现在不是了。我已经使用了最新版本的electron builder,并开始在没有运气的情况下重新使用这些版本

jenkins服务器是CentOS,使用了docker葡萄酒容器。我不能控制实际的构建服务器,我只能提交我的构建

生成错误:

"electron-builder": "21.2.0",
"electron-packager": "7.6.0",
"electron": "8.5.0",
{
  "win": {
    "icon": "app/ico/icon.ico"
  },
  "nsis": {
    "oneClick": false,
    "perMachine": true,
    "include": "installer.nsh"
  },
  "directories": {
    "output": "release"
  }
}
electron builder--win--x64--ia32--pd=“electron packager/win32-x64/MYAPP-win32-x64”--config=builder.json

软件包版本:

"electron-builder": "21.2.0",
"electron-packager": "7.6.0",
"electron": "8.5.0",
{
  "win": {
    "icon": "app/ico/icon.ico"
  },
  "nsis": {
    "oneClick": false,
    "perMachine": true,
    "include": "installer.nsh"
  },
  "directories": {
    "output": "release"
  }
}
Builder.json:

"electron-builder": "21.2.0",
"electron-packager": "7.6.0",
"electron": "8.5.0",
{
  "win": {
    "icon": "app/ico/icon.ico"
  },
  "nsis": {
    "oneClick": false,
    "perMachine": true,
    "include": "installer.nsh"
  },
  "directories": {
    "output": "release"
  }
}

我使用调试器运行构建脚本,发现了一个标志,这是我解决该问题的方法

如前所述,该标志为
packElevateHelper
,除非您确实需要提升功能,否则您可以显式忽略它,从而完全避免复制文件的尝试

例如,您的配置应具有包括以下属性的NSIS选项:

  "nsis": {
    "packElevateHelper": false,
  },
更新: 我刚刚确认了一种通过
elevate.exe
复制的方法

确保已创建应用程序
.exe
文件的二进制输出文件夹也包含
资源
文件夹。试图将
elevate.exe
复制到要安装的软件包中的
resources
文件夹中的
copyfile
调用无法确保此文件夹已存在

在我的例子中,使用将
prepackaged
属性设置为binary build output文件夹的编程API,在创建目录后,我只调用了
electron builder
build
函数:

fs.promises.mkdir(path.join(<path_to_binary_folder>, 'resources'));
fs.promises.mkdir(path.join(,'resources');

当文件夹存在时,“复制”命令工作正常。

您能提供一个实际的例子吗?