公司 Electron 打包每次都需要12分钟以上,看日志每次都是 electron-builder 签名消耗时间巨长,签名时间长达8分钟。优化后打包签名 10 多秒就能完成,整体打包5分钟,其中 electron-builder 构建过程 2-3分钟。不需要查看过程可以直接跳转总结。
原因分析
- 本地打包查看下签名时间
本地打包签名很快,完整的一次 electron-builder 构建大概 2-3 分钟,说明服务器打包是有很大的优化空间。
- 服务器上不使用 jenkins 打包
登录上服务器拉代码,手动执行一次打包发现打包的过程也很快,一次 electron-builder 构建大概 2-3 分钟。这时候猜测是不是 jenkins 的原因。electron-builder 可以使用通过设置 DEBUG=electron-builder 查看 electron-builder 打包过程中的详细日志。于是我在服务器上手动打包打开 DEBUG 日志。
- 服务器上使用 jenkins 打包
在 jenkins 打包也把 DEBUG 日志打开,对比下手动打包和 jenkins 打包的日志区别。发现 jenkins 打包过程中日志里有很多 keychain 文件日志,手动打包则没有,keychain 都是 Mac 的钥匙串文件。这时候才发现手动打包的用户和 jenkins 打包用户不一样。于是手动也切换成打包的用户,现在手动打包也变慢了,看来签名很慢的原因就是很多 keychain 文件导致的。
解决
- 先使用 security list-keychains 查看所有的钥匙串。有很多钥匙串就是之前日志里面显示的。
- 网上有中说法可以直接使用 sudo systemkeychain -vfcC 命令重置钥匙串。但是如果你的钥匙串里面存储了重要的密码或者签名还是不要这样使用。
- 我尝试使用 delete-keychain 一直没有成功。于是我参照网上的修改了~/Library/Preferences/com.apple.security.plist 这个文件,把这个文件里面的看似以前 electron-builder 生成的钥匙串都删除。第一次我删除了全部的下面这种格式的。但是打包的时候签名失败了,于是我尝试对这种钥匙串留下一个不删除,签名成功了,目前还没发现什么原因导致如此的。删除完成后签名只需要 10 多秒。electron-builder 构建过程 2-3分钟。
<dict>
<key>DbName</key>
<string>/private/var/folders/23/lfxwt5nn2_g0v82bcwj87sk000008b/T/t-SovFOB/1.keychain</string>
<key>GUID</key>
<string>{xxxxxxxxxxxx}</string>
<key>SubserviceType</key>
<integer>6</integer>
</dict>
总结
- DEBUG=electron-builder 可以查看 electron-builder 打包过程中的 debug 日志。
- electron-builder 打包主要是签名慢,签名慢的原因是无用的钥匙串太多,解决办法有两种: