在 Linux 中使用 jenkins 和 electron-packager 为 windows 打包电子应用程序
Packaging electron app for windows with jenkins and electron-packager in Linux
我正在尝试使用 Jenkins 自动构建电子应用程序。在我直接在 windows PC 上使用 electron-packager 之前(因为该应用程序打算在 windows 中使用)但现在我想使用 Linux 环境进行构建处理(例如 Ubuntu)我收到以下错误:
15:55:32 Packaging app for platform win32 ia32 using electron v1.8.7
15:55:36 WARNING: Found 'electron' but not as a devDependency, pruning anyway
15:56:21 Could not find "wine" on your system.
15:56:21
15:56:21 Wine is required to use the appCopyright, appVersion, buildVersion, icon, and
15:56:21 win32metadata parameters for Windows targets.
15:56:21
15:56:21 Make sure that the "wine" executable is in your PATH.
15:56:21
15:56:21 See https://github.com/electron-userland/electron-packager#building-windows-apps-from-non-windows-platforms for details.
旧打包脚本(在 package.json 中定义)
electron-packager . test-app --overwrite --asar --platform=win32 --arch=ia32 --prune=true --out=release-builds
按照建议,我为打包创建了一个 gulp 脚本:
var opts = {
name: pkg.name,
platform: 'win32',
arch: 'ia32', // ia32, x64 or all
dir: './', // source location of app
out: './edist/', // destination location for app os/native binaries
asar: true, // compress project/modules into an asar blob but don't use asar to pack the native compiled modules
overwrite: true,
prune: true,
electronVersion: electronVersion , // Tell the packager what version of electron to build with
appCopyright: pkg.copyright, // copyright info
appVersion: pkg.version, // The version of the application we are building
win32metadata: { // Windows Only config data
CompanyName: pkg.authors,
ProductName: pkg.name,
FileDescription: pkg.description,
OriginalFilename: pkg.name + '.exe'
}
};
gulp.task('build:electron', done => {
console.log('Launching task to package binaries for ' + opts.name + ' v' + opts['appVersion']);
packager(opts).then(appPaths => {
console.log(' PackagerDone(). appPaths : ', appPaths);
var zippedPromises = appPaths.map(function (appPath) {
console.log('Preparing pipe for zip ', appPath + ".zip");
return zipFolder(appPath, appPath + ".zip");
});
Promise.all(zippedPromises).then(function () {
console.log(' Zip file created.');
}).catch(function (error) {
console.error(error, error.stack);
});
done();
});
});
同样,在 Windows 中有效,但 returns 在 Ubuntu 中出现相同的错误。
(zipFolder将release文件夹转换成zip文件,只是我写的一个额外的功能)
我的问题是,是否可以根本不安装 wine 并让它运行?
简短的回答是,在构建 script/Jenkins 环境中尝试 运行 时,您可以更有效地使用 electron-packager
API。至少,那是我发现的。这使您可以更简洁地配置和参数化您的建筑。
在我们的例子中,我们将 electron-packager
包装在一个漂亮的 gulp
脚本中,以使其构建得很好,并且可以很好地从 Jenkins 调用。
此 link 可能会让您了解如何进行操作以及适合使用的标准组件:
最后,解决方案可能是 运行 直接在 Windows 环境中构建脚本,或者在 Linux 下安装 Wine(其中 Jenkins 'living'). @Kim Gentes 的想法帮助我思考,特别是以更好、更易读的方式组织构建脚本。
我正在尝试使用 Jenkins 自动构建电子应用程序。在我直接在 windows PC 上使用 electron-packager 之前(因为该应用程序打算在 windows 中使用)但现在我想使用 Linux 环境进行构建处理(例如 Ubuntu)我收到以下错误:
15:55:32 Packaging app for platform win32 ia32 using electron v1.8.7
15:55:36 WARNING: Found 'electron' but not as a devDependency, pruning anyway
15:56:21 Could not find "wine" on your system.
15:56:21
15:56:21 Wine is required to use the appCopyright, appVersion, buildVersion, icon, and
15:56:21 win32metadata parameters for Windows targets.
15:56:21
15:56:21 Make sure that the "wine" executable is in your PATH.
15:56:21
15:56:21 See https://github.com/electron-userland/electron-packager#building-windows-apps-from-non-windows-platforms for details.
旧打包脚本(在 package.json 中定义)
electron-packager . test-app --overwrite --asar --platform=win32 --arch=ia32 --prune=true --out=release-builds
按照建议,我为打包创建了一个 gulp 脚本:
var opts = {
name: pkg.name,
platform: 'win32',
arch: 'ia32', // ia32, x64 or all
dir: './', // source location of app
out: './edist/', // destination location for app os/native binaries
asar: true, // compress project/modules into an asar blob but don't use asar to pack the native compiled modules
overwrite: true,
prune: true,
electronVersion: electronVersion , // Tell the packager what version of electron to build with
appCopyright: pkg.copyright, // copyright info
appVersion: pkg.version, // The version of the application we are building
win32metadata: { // Windows Only config data
CompanyName: pkg.authors,
ProductName: pkg.name,
FileDescription: pkg.description,
OriginalFilename: pkg.name + '.exe'
}
};
gulp.task('build:electron', done => {
console.log('Launching task to package binaries for ' + opts.name + ' v' + opts['appVersion']);
packager(opts).then(appPaths => {
console.log(' PackagerDone(). appPaths : ', appPaths);
var zippedPromises = appPaths.map(function (appPath) {
console.log('Preparing pipe for zip ', appPath + ".zip");
return zipFolder(appPath, appPath + ".zip");
});
Promise.all(zippedPromises).then(function () {
console.log(' Zip file created.');
}).catch(function (error) {
console.error(error, error.stack);
});
done();
});
});
同样,在 Windows 中有效,但 returns 在 Ubuntu 中出现相同的错误。 (zipFolder将release文件夹转换成zip文件,只是我写的一个额外的功能)
我的问题是,是否可以根本不安装 wine 并让它运行?
简短的回答是,在构建 script/Jenkins 环境中尝试 运行 时,您可以更有效地使用 electron-packager
API。至少,那是我发现的。这使您可以更简洁地配置和参数化您的建筑。
在我们的例子中,我们将 electron-packager
包装在一个漂亮的 gulp
脚本中,以使其构建得很好,并且可以很好地从 Jenkins 调用。
此 link 可能会让您了解如何进行操作以及适合使用的标准组件:
最后,解决方案可能是 运行 直接在 Windows 环境中构建脚本,或者在 Linux 下安装 Wine(其中 Jenkins 'living'). @Kim Gentes 的想法帮助我思考,特别是以更好、更易读的方式组织构建脚本。