一早來到公司,同事說Jenkins一直報錯,無法編譯,讓我看看怎么回事。
打開編譯日志,看到以下錯誤

錯誤日志
一開始還以為是,我把TypeScript分支不小心合并到了發(fā)布分支上面,最近在研究vue和TypeScript結(jié)合,起了一個分支來搞這個事情。
但是看了下git記錄,并沒有記錄,我還特意看了下yarn.lock的eslint的版本,發(fā)現(xiàn)也沒有升級。
很奇怪,然后打開Jenkins的編譯發(fā)布代碼,看到如下配置,瞬間知道了原因

Jenkins的編譯發(fā)布代碼
我們開發(fā)環(huán)境一直用的是yarn,沒有用npm,代碼里面也沒有package-lock.json,昨天升級了的我們公司的eslint的包,增加了TypeScript的檢測和支持,所以在所以Jenkins用npm編譯的時候,默認拉了最新的包,又因為package.json沒有鎖死版本,導(dǎo)致需用用到TypeScript,導(dǎo)致出錯了。
切換下配置命令
yarn
npm run pre
在發(fā)布下,發(fā)現(xiàn)又失敗了
10:35:03 error get-caller-file@2.0.5: The engine "node" is incompatible with this module. Expected version "6.* || 8.* || >= 10.*". Got "9.10.0"
10:35:03 error Found incompatible module.
版本不一致,導(dǎo)致又發(fā)布失敗,切換node版本,再發(fā)布,成功了。
目前公司前端發(fā)布依賴于Jenkins,開發(fā)環(huán)境和線上編譯有時會不一致,最好就是換掉Jenkins,發(fā)布專門用一個庫來管理,用gitlab 自帶的ci環(huán)境,這樣才能最大限度減少這方面的問題。