Egret4.0升级Egret5.0导致Jenkins无法编译项目

项目升级到Egret5.0,同时也把Egret的引擎工具更换为EgretLauncher,结果出现问题,原来跑得好好Jenkins,突然无法进行编译了。(以前4.0的时候是好好的)。花费了一些功夫,追踪了Egret引擎的相关编译,最终才找到解决办法。现在把这些给记录下来,主要也是方便自己升级或者降级引擎时可以查看。

Jenkins错误表现

直接查看编译错误信息,发现了下面的错误信息

C:\Program Files (x86)\Jenkins\workspace\pal_dev>C:\Users\sodaChen\AppData\Roaming\npm\egret.cmd clean 
C:\Program Files (x86)\Egret\EgretLauncher\resources\app\engine\win\selector.js:86
        var isUsingDefault = requestVersion == defaultVersion.version;
                                                             ^

TypeError: Cannot read property 'version' of null
    at entry (C:\Program Files (x86)\Egret\EgretLauncher\resources\app\engine\win\selector.js:86:62)
    at Object.<anonymous> (C:\Program Files (x86)\Egret\EgretLauncher\resources\app\engine\win\selector.js:360:1)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.runMain (module.js:575:10)
    at run (bootstrap_node.js:352:7)
    at startup (bootstrap_node.js:144:9)
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE

既然有代码报错,那么就追踪相关的代码,从

C:\Program Files (x86)\Egret\EgretLauncher\resources\app\engine\win\selector.js

这个js文件开始追踪。发现这段代码获取egret系统路径有问题

function getAppDataPath() {
    switch (process.platform) {
        case 'win32': return process.env['APPDATA'] || path.join(process.env['USERPROFILE'], 'AppData', 'Roaming');
        case 'darwin': return path.join(os.homedir(), 'Library', 'Application Support');
        case 'linux': return process.env['XDG_CONFIG_HOME'] || path.join(os.homedir(), '.config');
        default: throw new Error('Platform not supported');
    }
}

跟我们在cmd下面输入egret build获取的引擎配置路径不一样。最终发现是引擎的位置读取错了。最终发现是引擎的位置读取错了。读成这样了:

C:\Windows\system32\config\systemprofile\AppData\Roaming\Egret\engine

实际引擎的路径是

C:\Users\sodaChen\AppData\Roaming\Egret\engine
怀疑是Jenkins里面有改变环境变量(也有可能是白鹭自己设置环境变量有问题,没去深入研究)

解决方法是在EgretLauncher的安装路径下修改这个js文件

C:\Program Files (x86)\Egret\EgretLauncher\resources\app\engine\egret.js

强制把enginePath这个变量设置为自己的引起路径

enginePath = "C:\\Users\\linlong\\AppData\\Roaming\\Egret\\engine\\"

它会读取这个配置文件config.json,然后这个配置文件有记录你的使用的引擎版本号
如果你有修改自定义引擎位置,那么记得维护这个配置文件
比方说我的最新配置:

C:\Program Files (x86)\Jenkins\workspace\egret-core

最终可以正常编译了,有个麻烦的地方就每次升级egret必须再次egret.js文件。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐