сбой electron-builder в jenkins с: ENOENT: нет такого файла или каталога, copyfile elevate.exe

#node.js #jenkins #electron

#node.js #дженкинс #electron

Вопрос:

Я начал работать над старым приложением на базе Electron. В рамках этой работы мне нужно было обновить многие пакеты, включая electron-builder.

После многих настроек всех версий пакетов и т. Д. У меня есть приложение, созданное на моем локальном компьютере, который является Windows 10.

Когда я отправляю сборку в jenkins и пытаюсь выполнить сборку electron, я получаю следующую ошибку: ENOENT: нет такого файла или каталога, copyfile ‘/root/.cache/electron-builder/nsis/nsis-3.0.3.2/elevate.exe ‘ -> ‘/home/jenkins/workspace/MYAPP_myapp-client_master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/electron-packager/win32-x64/MYAPP-win32-x64/resources/elevate.exe’.

Я понимаю, что это означает, что файл в основном не существует? Я не понимаю, как это могло произойти, поскольку та же конфигурация сборки создавала приложение с предыдущими версиями electron-builder, но теперь это не так. Я перешел на последнюю версию electron-builder и начал работать с версиями, но безуспешно.

Сервер jenkins — CentOS, и используется контейнер docker-wine. У меня нет контроля над фактическим сервером сборки, я могу только фиксировать свои сборки.

ОШИБКА СБОРКИ:

electron-builder —win —x64 —ia32 —pd=»electron-packager /win32-x64/MYAPP-win32-x64″ —config=builder.json

   • electron-builder  version=21.2.0 os=3.10.0-327.18.2.el7.x86_64
  • artifacts will be published if draft release exists  reason=CI detected
  • loaded configuration  file=/home/jenkins/workspace/MYAPP_myapp-client_master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/builder.json
  • building        target=nsis file=release/MYAPP Setup 3.0.3.exe archs=x64, ia32 oneClick=false perMachine=true
  • downloading     url=https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-3.0.3.2/nsis-3.0.3.2.7z size=1.4 MB parts=1
  • downloaded      url=https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-3.0.3.2/nsis-3.0.3.2.7z duration=6.237sENOENT: no such file or directory, copyfile '/root/.cache/electron-builder/nsis/nsis-3.0.3.2/elevate.exe' -> '/home/jenkins/workspace/MYAPP_myapp-client_master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/electron-packager/win32-x64/MYAPP-win32-x64/resources/elevate.exe'  stackTrace=
                                                                                                                                                                                                                                                                                         Error: ENOENT: no such file or directory, copyfile '/root/.cache/electron-builder/nsis/nsis-3.0.3.2/elevate.exe' -> '/home/jenkins/workspace/MYAPP_myapp-client_master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/electron-packager/win32-x64/MYAPP-win32-x64/resources/elevate.exe'
                                                                                                                                                                                                                                                                                             at processImmediate (internal/timers.js:458:21)
                                                                                                                                                                                                                                                                                         From previous event:
                                                                                                                                                                                                                                                                                             at NsisTarget.buildInstaller (/home/jenkins/workspace/MYAPP_myapp-client_master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/node_modules/app-builder-lib/src/targets/nsis/NsisTarget.ts:203:29)
                                                                                                                                                                                                                                                                                             at processTicksAndRejections (internal/process/task_queues.js:93:5)
                                                                                                                                                                                                                                                                                             at NsisTarget.finishBuild (/home/jenkins/workspace/MYAPP_myapp-client_master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/node_modules/app-builder-lib/src/targets/nsis/NsisTarget.ts:110:7)
                                                                                                                                                                                                                                                                                             at async Promise.all (index 2)
                                                                                                                                                                                                                                                                                             at AsyncTaskManager.awaitTasks (/home/jenkins/workspace/MYAPP_myapp-client_master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/node_modules/builder-util/src/asyncTaskManager.ts:65:25)
                                                                                                                                                                                                                                                                                             at Packager.doBuild (/home/jenkins/workspace/MYAPP_myapp-client_master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/node_modules/app-builder-lib/src/packager.ts:449:5)
                                                                                                                                                                                                                                                                                             at executeFinally (/home/jenkins/workspace/MYAPP_myapp-client_master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/node_modules/builder-util/src/promise.ts:12:14)
                                                                                                                                                                                                                                                                                             at Packager._build (/home/jenkins/workspace/MYAPP_myapp-client_master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/node_modules/app-builder-lib/src/packager.ts:366:31)
                                                                                                                                                                                                                                                                                             at Packager.build (/home/jenkins/workspace/MYAPP_myapp-client_master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/node_modules/app-builder-lib/src/packager.ts:330:12)
                                                                                                                                                                                                                                                                                             at executeFinally (/home/jenkins/workspace/MYAPP_myapp-client_master-BZL24OQAMKV5LCPISXOCH6VJELCMS26NKBSHJ6R43G746JVMSVBQ/node_modules/builder-util/src/promise.ts:12:14)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! myapp-client@3.0.3 installer:win: `electron-builder --win --x64 --ia32 --pd="electron-packager/win32-x64/MYAPP-win32-x64" --config=builder.json`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the myapp-client@3.0.3 installer:win script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-09-01T12_10_26_791Z-debug.log
[Pipeline] 
[Pipeline] // node
[Pipeline] End of Pipeline
[Bitbucket] Notifying commit build result
[Bitbucket] Build result notified
ERROR: script returned exit code 1
Finished: FAILURE
  

Версии пакетов:

 "electron-builder": "21.2.0",
"electron-packager": "7.6.0",
"electron": "8.5.0",
  

Builder.json:

 {
  "win": {
    "icon": "app/ico/icon.ico"
  },
  "nsis": {
    "oneClick": false,
    "perMachine": true,
    "include": "installer.nsh"
  },
  "directories": {
    "output": "release"
  }
}
  

Ответ №1:

Я запустил свой скрипт сборки с помощью отладчика и нашел флаг, который был моим решением проблемы.

Флаг, packElevateHelper как описано здесь, и если вам действительно не нужна функция повышения, вы можете явно опустить его и, следовательно, полностью избежать попытки скопировать файл.

Например, в вашей конфигурации должны быть параметры NSIS, которые включают это свойство:

   "nsis": {
    "packElevateHelper": false,
  },
  

Обновить:
Я только что подтвердил способ сделать этот проход для меня, который копирует elevate.exe .

Убедитесь, что папка двоичного вывода, в которой был создан .exe файл вашего приложения, также содержит resources папку. copyfile Вызов, который пытался скопировать elevate.exe в resources папку в вашем пакете для установки, не гарантирует, что эта папка уже существует.

В моем случае, используя программный API со prepackaged свойством, установленным для моей папки вывода двоичной сборки, я просто вызвал electron-builder build функцию после создания каталога следующим образом:

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

Когда папка существует, команда копирования работает просто отлично.

Комментарии:

1. Можете ли вы привести реальный пример?