You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Angular5:Jenkins构建中Vendor bundle无法更新问题

解决Jenkins构建Angular 5应用时Vendor Bundle不更新的问题

我之前也踩过类似的Jenkins构建Angular项目时vendor bundle不更新的坑,结合你的场景(Angular 5、webpack打包、yarn包管理),可以从这几个常见方向排查解决:

1. 清理Jenkins工作区的残留文件

Jenkins默认会保留上一次构建的工作区文件,旧的node_modules或者dist目录可能导致构建时复用旧的依赖或打包产物,从而让vendor bundle没更新。

  • 解决办法:在Jenkins构建脚本的最开头添加清理命令:
    rm -rf node_modules dist
    
    然后再执行yarn install和构建命令。也可以安装Jenkins的Workspace Cleanup插件,配置每次构建前自动清理工作区,更省心。

2. 强制刷新Yarn依赖缓存

Yarn的全局缓存可能在Jenkins服务器上留存了旧版本的依赖,即使你本地更新了依赖,Jenkins安装时还是会取缓存里的旧包。

  • 解决办法:构建时用--force参数强制重新安装所有依赖:
    yarn install --force
    
    或者先清理Yarn缓存再安装:
    yarn cache clean
    yarn install
    

3. 确保Angular CLI版本与本地一致

你本地用yarn global add @angular/cli@latest安装了最新版CLI,但Jenkins服务器上的全局CLI版本可能和本地不一致,不同版本的CLI打包逻辑可能有差异,导致vendor bundle生成异常。

  • 解决办法:不要依赖全局CLI,改用项目本地的CLI执行构建:
    1. 确保项目的package.json里已经包含@angular/cli依赖(本地执行yarn时应该已经安装了)
    2. package.jsonscripts里添加构建命令:
      "scripts": {
        "build:prod": "ng build --aot"
      }
      
    3. Jenkins构建时执行:
      yarn run build:prod
      
    这样会使用项目node_modules里的CLI版本,和本地完全一致。

4. 禁用Webpack构建缓存

Angular CLI的webpack配置默认可能启用了构建缓存,Jenkins构建时没有清除缓存目录,导致复用旧的vendor bundle缓存。

  • 解决办法:构建时添加--no-cache参数禁用缓存:
    ng build --aot --no-cache
    

5. 检查Jenkins工作区的文件权限

有时候Jenkins运行的系统用户没有修改dist目录的权限,新生成的vendor bundle无法覆盖旧文件,看起来就像是没更新。

  • 解决办法:检查Jenkins工作区的文件权限,确保运行Jenkins的用户有读写权限。可以在构建前添加权限修改命令(根据服务器系统调整):
    chmod -R 755 dist
    

建议先从清理工作区和强制重新安装依赖开始排查,这是最常见的原因。如果还是不行,再依次检查CLI版本、缓存参数和权限问题。

内容的提问来源于stack exchange,提问作者hakuna

火山引擎 最新活动